combobox itemssource绑定问题

问题描述:

在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事件,因为它自己管理它。

**编辑**

丑陋的解决方案,但为我工作,如果有人有更好的解决办法,请分享:)

清空收集,通知的GUI ,添加了通知给gui的真实集合

尝试使用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