【问题标题】:CompositeCollection doesn't propagate changes in underlying collectionsCompositeCollection 不会传播基础集合中的更改
【发布时间】:2013-07-10 15:09:44
【问题描述】:

我有一个我认为是 CompositeCollection 的理想场景,除了似乎对基础集合的项目的更改没有出现在 CompositeCollection 中(或者,无论如何,没有出现在 CompositeCollection 中)源是此 CompositeCollection 的控件)。

EDIT 1:两个基础集合都是 ObservableCollections。
EDIT 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>

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案1】:

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

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

    【讨论】:

    • 它们都是 ObservableCollections... 因此问题:/
    • 好吧,我什至检查了以防万一,CompositeCollection 可以与 ObservableCollections 一起使用并显示更新。所以 ComboBox 显示了一些项目,但不会更新新项目,对吧?您能否发布Products.StandardCustomProducts 的代码以及如何更新它们?
    • 我实际上没有 Products.Standard 和 CustomProducts 的代码 - 为了简洁起见,我简化了问题。只是为了澄清一下,添加了该项目,但该项目的内容在组合框的下拉列表中没有改变
    • 所以您是说 ComboBox 会立即显示新项目,但是如果您更改这些项目的某些属性 - 更改不会反映?如果没有代码,很难说出你错过了什么。如果项目实现了INotifyPropertyChanged,它们是否真的在setter中调用了PropertyChanged事件?
    【解决方案2】:

    我修复了它 - 问题是(通常是)一个白痴程序员(那就是我)。

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

    【讨论】:

      猜你喜欢
      • 2021-05-31
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      相关资源
      最近更新 更多