2017-03-17 57 views
1

我有WPF Application,我想用Model-View-ViewModel pattern。所以,我創建了我的Model類,我的ViewXAML)和我的ViewModel作爲它們之間的橋樑。 ViewModel有一個ObservableCollection用於填充ListBox的內容。所以,在我的XAML中,我將ItemSources綁定到了我的列表中。 無論如何,我的方法fillMyDataStructure()僅在應用程序啓動時調用。-WPF Model-View-ViewModel- ListBox的ItemSources在連接到DataBase後可用

我的問題是應用程序啓動時列表未填滿。用戶單擊「連接到數據庫按鈕」,並且只有在連接成功時列表纔會填滿。但是我的ListBox是空的,因爲應用程序試圖只在啓動時填充它,當列表爲空的時候。那麼,我該如何解決這個問題,忠於Model-View-ViewModel模式?先謝謝你。

+0

我想你忘了實現INotifyPropertyChanged。如果您替換整個ObservableCollection,則需要通知視圖有關ViewModel中的更改。看看http://www.c-sharpcorner.com/UploadFile/0b73e1/mvvm-model-view-viewmodel-introduction-part-3/ – Fruchtzwerg

+1

我想你忘了包含代碼來重現你的問題:https:/ /stackoverflow.com/help/mcve – mm8

回答

1

你需要的是檢測列表中的變化。有兩種方法可能需要。一種是檢測包含集合的屬性何時發生變化(即將其設置爲另一個集合實例)。另一個是集合本身發生變化時(添加或刪除項目時)。
通過使用ObservableCollection解決了第二個問題。 對於第一個,您需要實施INotifyPropertyChanged界面併爲您的收藏資產籌集PropertyChanged事件。 您可以輕鬆找到用於實現此界面的示例。

+0

謝謝。我這樣做。事實是我做了「this.DataContext = new myViewModel()」,並且只有在myViewModel中列表被填充,而不是在連接到數據庫的以下時刻完成。也許正確的解決方案是創建一個事件connectedDB,在建立連接時將其引發,並在此時僅設置DataContext。你怎麼看待這件事? – user2896152

+0

我認爲你應該編輯你的問題,並添加代碼的相關部分:) 爲了更準確的答案,我們需要更精確的問題(這意味着代碼)。 – Shadowed