组合框itemssource绑定问题

在MVVM WPF应用程序中,我有一个用于管理警报的主控细节视图。 在AlarmDetails视图中,我有几个通过ComboBox控件设置的属性。 其中之一就是Alarm's Source,并且可以在另一个View(SourcesView)中更改这些源,从而更改AlarmDetailsView中的组合框内容。

数据流的方式相对简单

  • SourcesView中将源添加到集合中
  • 消息从SourcesView发送,并由所有AlarmDetailsViewModel接收
  • 每个AlarmDetailsViewModel中的Sources集合都相应地更改,并且由于它是一个ObservableCollection,它会通知每个绑定目标的更改
  • AlarmDetailsView将其DataContext设置为选定的AlarmDetailsViewModel,因此它的Sources ComboBox的ItemsSource属性被更新(我使用虚拟转换器查看它,在调试中,我可以看到更新的集合被传递给ItemsSource,并且它包含新添加的项目)
  • 在发生所有这些后,当我导航到AlarmsView / AlarmDetailsView选项卡时,来源组合框中的项目不包含新项目。
  • 当我在主列表中选择一个新的报警并选择原来的一个时,组合框显示新项目就好了(当我在主列表中选择一个项目时,AlarmDetailsView的DataContext属性得到更新)。
  • 我对此感到不知所措,我一直在沉溺于此。

    任何人有想法? 任何调试建议?

    谢谢,

    亚历克斯

    编辑:不更新的组合框位于AlarmDetailsView内,这意味着它用于设置Alarm对象(即其来源,即)的属性。 希望这可以帮助。

    编辑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}}"
    
    链接地址: http://www.djcxy.com/p/41257.html

    上一篇: combobox itemssource binding issue

    下一篇: Programatically create ItemsPanelTemplate for Silverlight ComboBox?