2011-03-12 98 views
0

到的ObservableCollection我有一個MainViewModel包含一個ObservableCollection的引用:綁定與MVVM光

public ObservableCollection<SomeClass> ListOfPeople 
{ 
    get 
    { 
     return MyClass.BaseCollection; 
    } 
} 

BaseCollection也就是ObservableCollection<SomeClass>一個實例。 ListOfPeople綁定到第二頁上的ListBox控件 - 應用程序從第一頁開始,啓動下載過程以填充BaseCollection並在下載過程中切換到第二頁。

問題是,當發生綁定時,BaseCollection爲空,因此未填充ListBox。但是,即使下載過程完成,列表框仍保留爲空。我假設這是因爲BaseCollection沒有通知有關集合的現有更改的正確實例,但我不確定。

BaseCollection裏面有物品 - 我確認了。

有關如何解決此問題的任何建議?這裏的任何人都可以通過MVVM Light綁定到ObservableCollection,就像我上面展示的那樣?

回答

4

如果DONOT要實例在構造一個空ListOfPeople和使用這個實例數據庫加載,你必須這樣做:

ListOfPeople裝載完成後,您MainViewModel必須調用RaisePropertyChanged("ListOfPeople");告訴視圖數據已經改變。

背景:感謝ObservableCollection MyClass.BaseCollection.Add()更新了gui。只要MyClass.BaseCollection = new Obser...被調用,gui就沒有更多的gui更新,因爲gui提到MyClass.BaseCollection的舊競爭。 MVVM光 - RaisePropertyChanged()告訴GUI更新其參考一個新的集合

+0

實際上它像一個魅力一樣工作 - 畢竟那裏有MVVM Light的細微差別。謝謝! – 2011-03-12 05:44:47

+0

另一方面,用戶將不得不等待一段時間,直到列表框中出現任何項目。另外,爲什麼你會使用ObservableCollection呢?即使使用簡單的List <>並在下載完成時執行RaisePropertyChanged(..)也會執行相同的操作。 – 2011-03-12 06:11:47

+0

你今天節省了我的一天! – Signcodeindie 2011-06-20 16:05:36

3

我還沒有在MVVM Light上工作過,所以很抱歉,如果有什麼特定的事情,我錯過了。

看着你實現,

public ObservableCollection<SomeClass> ListOfPeople 
{ 
    get 
    { 
     return MyClass.BaseCollection; 
    } 
} 

此代碼應工作,這是綁定到這個源頭控制應該得到PROPERT而不必擔心在其中創建的可觀察到的實例的實際源更新。

因此,這裏唯一可能的問題可能是您的MyBase.BaseCollection在開始時爲null。所以,如果你避免這種情況,並創建一個空的集合,你已經宣佈這個可觀察項目,然後觸發你的下載過程,那麼一切都應該正常工作。

希望這會有所幫助。

+0

我@同意去啦的回答,只需要在MyClass的constuctor實例化BaseCollection會解決這個問題。在這個綁定場景中,MVVMLight與此無關。 – 2011-03-12 05:05:37

+0

MVVM Light在那裏供參考 - 只是確保沒有實現細微差別。事情是 - MyClass是靜態的,這很好 - 有一個靜態構造函數,我可以在切換到第二個頁面(因此綁定)之前初始化集合。在開始時,集合確實爲null,但即使進行了初始化,它對它也沒有任何影響。 – 2011-03-12 05:26:36