[英]Binding to ObservableCollection with MVVM Light
我有一個MainViewModel
,其中包含對ObservableCollection
的引用:
public ObservableCollection<SomeClass> ListOfPeople
{
get
{
return MyClass.BaseCollection;
}
}
BaseCollection
還是ObservableCollection<SomeClass>
的實例。 ListOfPeople
綁定到第二頁上的ListBox
控件-應用程序從第一頁開始,啟動下載過程以填充BaseCollection
,並在下載仍在進行時切換到第二頁。
問題在於,發生綁定時, BaseCollection
為null,因此不會填充ListBox
。 但是,即使下載過程完成,ListBox仍然保持為空。 我以為這是因為BaseCollection沒有將有關集合的現有更改的適當實例通知給我,但我不確定。
BaseCollection
里面有項目-我確認了。
關於如何解決此問題的任何建議? 有人像我上面顯示的那樣通過MVVM Light綁定到ObservableCollection嗎?
如果您不想在構造函數中實例化一個空的ListOfPeople並將此實例用於數據庫加載,則必須執行以下操作:
完成ListOfPeople
加載后,您的MainViewModel
必須調用RaisePropertyChanged("ListOfPeople");
告訴視圖數據已更改。
背景:感謝ObservableCollection MyClass.BaseCollection.Add()
更新了gui。 一旦MyClass.BaseCollection = new Obser...
被調用,就不再進行gui的更新,因為gui擁有對MyClass.BaseCollection
的舊內容的引用。 mvvm-light-RaisePropertyChanged()告訴gui更新對新集合的引用
我尚未在MVVM Light上工作,所以對不起我是否缺少某些特定的東西。
看你的實現,
public ObservableCollection<SomeClass> ListOfPeople
{
get
{
return MyClass.BaseCollection;
}
}
該代碼應該起作用,並且綁定到該源的控件應該獲得適當的屬性更新,而不必考慮創建observable實例的實際源。
因此,這里唯一可能的問題可能是MyBase.BaseCollection在開始時為null。 因此,如果避免這種情況,並在聲明此可觀察項的地方創建一個空集合,然后按原樣觸發下載過程,則一切應該正常進行。
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.