我有一个我认为是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>
答案 0 :(得分:0)
哪种类型的收藏品是Products.Standard
和CustomProducts
?如果他们没有更改通知(不要实施INotifyCollectionChanged),那么CompositeCollection
无法知道某些内容发生了变化。
ObservableCollection<>在这种情况下应该可以正常工作。
答案 1 :(得分:0)
我修好了 - 问题是(因为它最常见的是)一个白痴程序员(那将是我)。
碰巧集合的Item(单个Product类)有一个覆盖ToString()
方法返回了Product实例的Name属性。所以,组合框显示了它应该显示的内容,这是产品的名称,除了它是基于ToString()
方法进行的...因为我忘记为ComboBox创建一个数据表。难怪那个名字的变化没有反映出来