簡體   English   中英

使用MVVM Light綁定到ObservableCollection

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM