Wpf 组合框项目资源绑定问题

Wpf 组合框项目资源绑定问题,wpf,mvvm,binding,combobox,Wpf,Mvvm,Binding,Combobox,在MVVM WPF应用程序中,我有一个用于管理报警的主详细视图。在AlarmDetails视图中,我有几个通过组合框控件设置的属性。其中一个是报警源,可以在另一个视图(SourcesView)中更改这些源,从而更改AlarmDetailsView中的组合框内容 数据流的方式相对简单 源已添加到SourcesView中的集合中 消息从SourcesView发送,并由所有AlarmDetailsView模型接收 每个AlarmDetailsViewModel中的Sources集合都会相应地更改,因为

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

数据流的方式相对简单

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

    有人有主意吗?有什么调试建议吗

    谢谢

    亚历克斯

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


    编辑2:除了下面的答案之外,另一个解决方案是使用ObservableCollection而不是List。出于某种原因,在列表上引发PropertyChange事件(如上所述)会触发组合框刷新其ItemsSource,但不会将新项目添加到其下拉列表中。使用ObservaleCollection,不需要引发propertychange事件,因为它自己管理它。

    尝试使用CollectionViewSource处理主/详细绑定

    这里有一个例子

    <Window.Resources>
        <CollectionViewSource x:Key="data" Source="{Binding}" />
    <Window.Resources>
    
    DataContext="{Binding CurrentItem, Source={StaticResource data}}"
    
    
    DataContext=“{Binding CurrentItem,Source={StaticResource data}}”
    
    **编辑**

    丑陋的解决方案但对我有效如果有人有更好的解决方案请分享:)


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

    您是指将ComboBox的ItemsSource属性绑定到CollectionViewSource,而不是将其直接绑定到ViewModel的ObservableCollection,还是指将DetailsView的DataContext绑定到MasterView items集合的currentitem(看起来像是第二种选择)?我尝试了它(DataContext选项),但没有成功。请将CollectionViewSource绑定到ViewModel中的主集合。将主项控件(组合框)绑定到CollectionViewSource。将详细信息控件绑定到CollectionViewSource的CurrentItem属性。还要确保您的ItemsControl已IsSynchronizedWithCurrentItem=“True”好的,我意识到我的解释可能不完全清楚。错误组合框位于DetailsView中(它设置了一个details属性)。它不是一个选择要显示哪个细节视图的组合框。也不起作用。困扰我的是,我可以看到实际的ComboBox集合通过我添加到绑定中的转换器进行更新。当集合更改时,将调用转换器,并且经过的对象(ItemsSource集合)包含新项。但是,它不会显示在下拉列表中,直到我更改主列表中选定的报警。嗯,我也遇到了这个问题。做了一个黑客来修复它。。。。清空集合,通知GUI,将实际集合添加到GUI。。。丑陋的地狱,但为我工作,无论这是丑陋的,这是工作。如果您将其作为答案而不是评论发布,我会将其标记为答案。(除非有人提供真正的解决方案,这对我们双方都有利!:-)