CompositeCollection不会传播基础集合中的更改

时间:2013-07-10 15:09:45

标签: c# wpf xaml binding

我有一个我认为是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>

2 个答案:

答案 0 :(得分:0)

哪种类型的收藏品是Products.StandardCustomProducts?如果他们没有更改通知(不要实施INotifyCollectionChanged),那么CompositeCollection无法知道某些内容发生了变化。

例如,

ObservableCollection<>在这种情况下应该可以正常工作。

答案 1 :(得分:0)

我修好了 - 问题是(因为它最常见的是)一个白痴程序员(那将是我)。

碰巧集合的Item(单个Product类)有一个覆盖ToString()方法返回了Product实例的Name属性。所以,组合框显示了它应该显示的内容,这是产品的名称,除了它是基于ToString()方法进行的...因为我忘记为ComboBox创建一个数据表。难怪那个名字的变化没有反映出来