我有一个我认为是CompositeCollection的理想场景,只不过对基础集合项的更改似乎没有出现在CompositeCollection中(或者至少没有出现在该CompositeCollection的源代码的控件中)。
编辑1:两个基础集合都是ObservableCollections。
编辑2:添加新的/更新的项,但该项的内容没有反映在组合框的下拉区域中。每个项目都实现了INotifyPropertyChanged。
我是不是做错了什么,还是没有得到支持?
我现在拥有的是:
<ComboBox SelectedItem="{Binding Products}">
<ComboBox.Resources>
<CollectionViewSource x:Key="CustomProductsSource" Source="{Binding CustomProducts}" />
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={x:Static local:Products.Standard}}" />
<Separator/>
<CollectionContainer Collection="{Binding Source={StaticResource CustomProductsSource}}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>发布于 2013-07-16 20:32:41
我修复了它-问题是(因为它经常是)一个白痴程序员(那将是我)。
碰巧集合的项(单独的Product )有一个overriden ToString()方法返回Product的Name属性。因此,组合框显示了它应该显示的内容,即产品的名称,但它是基于ToString()方法进行的.因为我忘记为ComboBox创建一个DATATEMPLATE。怪不得名字的变化没有反映出来。
发布于 2013-07-10 15:57:36
Products.Standard和CustomProducts是什么类型的集合?如果它们没有更改通知(不要实现INotifyCollectionChanged),那么CompositeCollection就无法知道发生了什么变化。
例如,在这个场景中,ObservableCollection<>应该工作得很好。
https://stackoverflow.com/questions/17574295
复制相似问题