在MVVM WPF應用程序中,我有一個用於管理警報的主 - 細節視圖。在AlarmDetails視圖中,我有幾個通過ComboBox控件設置的屬性。其中之一就是Alarm's Source,並且可以在另一個View(SourcesView)中更改這些源,從而更改AlarmDetailsView中的組合框內容。combobox itemssource綁定問題
的數據流的方法是相對簡單
- 的源極被添加到集合中SourcesView
- 從SourcesView發送的消息,並且由所有AlarmDetailsViewModel
- 的源頭集合中的每個接收AlarmDetailsViewModel相應地改變,並且因爲它是一個ObservableCollection它通知每個綁定目標的變化
- AlarmDetailsView的DataContext設置爲一個選定的AlarmDetailsViewModel,因此Ite更新源組合框的msSource屬性(我使用虛擬轉換器查看它,在調試中我可以看到更新後的集合被傳遞給ItemsSource,並且它包含新添加的項目)
- 所有這些都發生後,在AlarmsView/AlarmDetailsView選項卡中,來源組合框中的項目不包含新項目。
- 當我在主列表中選擇一個新的報警並選擇原來的一個返回時,組合框顯示新項目就好了(當我在主列表中選擇一個項目時,AlarmDetailsView的DataContext屬性得到更新)。
我對此感到不知所措,我一直在沉溺於此。
任何人有想法?任何調試建議?
謝謝,
亞歷
編輯:不更新所在的AlarmDetailsView內,這意味着,它被用於設置報警對象的性質(其來源,即)的組合框。希望這可以幫助。
編輯2:除了下面的答案,另一種解決方案是使用ObservableCollection而不是List。出於某種原因,在List上引發PropertyChange事件(如上所述)會觸發ComboBox刷新其ItemsSource,但不會將新項添加到其下拉列表中。使用ObservableCollection,不需要引發propertychange事件,因爲它自己管理它。
是否將ComboBox的ItemsSource屬性綁定到CollectionViewSource,而不是將其直接綁定到ViewModel的O bservableCollection,或者你的意思是將DetailsView的DataContext綁定到MasterView items集合的當前項目(它看起來像第二個選擇)?我試過了(DataContext選項),但沒有成功。 – alex 2010-12-06 16:37:42
將CollectionViewSource綁定到ViewModel中的主集合。將您的主ItemsControl(ComboBox)綁定到您的CollectionViewSource。將您的詳細信息控件綁定到CollectionViewSource的CurrentItem屬性。還要確保你的ItemsControl有IsSynchronizedWithCurrentItem =「True」 – 2010-12-06 16:48:58