2010-12-06 104 views
0

在MVVM WPF應用程序中,我有一個用於管理警報的主 - 細節視圖。在AlarmDetails視圖中,我有幾個通過ComboBox控件設置的屬性。其中之一就是Alarm's Source,並且可以在另一個View(SourcesView)中更改這些源,從而更改AlarmDetailsView中的組合框內容。combobox itemssource綁定問題

的數據流的方法是相對簡單

  1. 的源極被添加到集合中SourcesView
  2. 從SourcesView發送的消息,並且由所有AlarmDetailsViewModel
  3. 的源頭集合中的每個接收AlarmDetailsViewModel相應地改變,並且因爲它是一個ObservableCollection它通知每個綁定目標的變化
  4. AlarmDetailsView的DataContext設置爲一個選定的AlarmDetailsViewModel,因此Ite更新源組合框的msSource屬性(我使用虛擬轉換器查看它,在調試中我可以看到更新後的集合被傳遞給ItemsSource,並且它包含新添加的項目)
  5. 所有這些都發生後,在AlarmsView/AlarmDetailsView選項卡中,來源組合框中的項目不包含新項目。
  6. 當我在主列表中選擇一個新的報警並選擇原來的一個返回時,組合框顯示新項目就好了(當我在主列表中選擇一個項目時,AlarmDetailsView的DataContext屬性得到更新)。

我對此感到不知所措,我一直在沉溺於此。

任何人有想法?任何調試建議?

謝謝,

亞歷

編輯:不更新所在的AlarmDetailsView內,這意味着,它被用於設置報警對象的性質(其來源,即)的組合框。希望這可以幫助。

編輯2:除了下面的答案,另一種解決方案是使用ObservableCollection而不是List。出於某種原因,在List上引發PropertyChange事件(如上所述)會觸發ComboBox刷新其ItemsSource,但不會將新項添加到其下拉列表中。使用ObservableCollection,不需要引發propertychange事件,因爲它自己管理它。

回答

0

**編輯**

醜陋的解決方案,但爲我工作,如果有人有更好的解決辦法,請分享:)

清空收集,通知的GUI ,添加了通知給gui的真實集合

0

嘗試使用CollectionViewSource來處理您的主/從綁定。

這裏有一個例子

<Window.Resources> 
    <CollectionViewSource x:Key="data" Source="{Binding}" /> 
<Window.Resources> 

DataContext="{Binding CurrentItem, Source={StaticResource data}}" 
+0

是否將ComboBox的ItemsSource屬性綁定到CollectionViewSource,而不是將其直接綁定到ViewModel的O bservableCollection,或者你的意思是將DetailsView的DataContext綁定到MasterView items集合的當前項目(它看起來像第二個選擇)?我試過了(DataContext選項),但沒有成功。 – alex 2010-12-06 16:37:42

+0

將CollectionViewSource綁定到ViewModel中的主集合。將您的主ItemsControl(ComboBox)綁定到您的CollectionViewSource。將您的詳細信息控件綁定到CollectionViewSource的CurrentItem屬性。還要確保你的ItemsControl有IsSynchronizedWithCurrentItem =「True」 – 2010-12-06 16:48:58