CompositeCollection没有';t在基础集合中传播更改

本文关键字:集合 传播 没有 CompositeCollection | 更新日期: 2023-09-27 18:21:46

我有一个我认为是CompositeCollection的理想场景,只是对基础集合的项所做的更改似乎不会出现在CompositeCollection中(或者,无论如何,不会出现在源为该CompositeCollection)。

EDIT 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>

CompositeCollection没有';t在基础集合中传播更改

Products.StandardCustomProducts是什么类型的集合?如果他们没有更改通知(不实现INotifyCollectionChanged),那么CompositeCollection就无法知道发生了什么更改。

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

我解决了这个问题——这个问题(通常是)是一个白痴程序员(那就是我)。

碰巧集合的Item(单个Product类)有一个被覆盖的ToString()方法返回了Product实例的Name属性。因此,组合框显示了它应该显示的内容,即产品的名称,只是它是基于ToString()方法进行的。。。因为我忘记为组合框创建数据模板。难怪对名称的更改没有反映