Wpf 组合框项目资源绑定问题
在MVVM WPF应用程序中,我有一个用于管理报警的主详细视图。在AlarmDetails视图中,我有几个通过组合框控件设置的属性。其中一个是报警源,可以在另一个视图(SourcesView)中更改这些源,从而更改AlarmDetailsView中的组合框内容 数据流的方式相对简单Wpf 组合框项目资源绑定问题,wpf,mvvm,binding,combobox,Wpf,Mvvm,Binding,Combobox,在MVVM WPF应用程序中,我有一个用于管理报警的主详细视图。在AlarmDetails视图中,我有几个通过组合框控件设置的属性。其中一个是报警源,可以在另一个视图(SourcesView)中更改这些源,从而更改AlarmDetailsView中的组合框内容 数据流的方式相对简单 源已添加到SourcesView中的集合中 消息从SourcesView发送,并由所有AlarmDetailsView模型接收 每个AlarmDetailsViewModel中的Sources集合都会相应地更改,因为
编辑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。。。丑陋的地狱,但为我工作,无论这是丑陋的,这是工作。如果您将其作为答案而不是评论发布,我会将其标记为答案。(除非有人提供真正的解决方案,这对我们双方都有利!:-)