谁使用 NotifyCollectionChangedEventArgs 的功能?

Who uses NotifyCollectionChangedEventArgs' features?

这是我的问题 的后续问题。

根据 Alex.Wei 的回答(以及 IndexedEnumerable 的源代码)WPF 忽略了 NotifyCollectionChangedEventArgs 的细节(例如 Action)并且总是对相同,最终就好像 Action == Reset.

所以我的问题是:谁使用 NotifyCollectionChangedEventArgs' 功能,如果我手动引发事件(对于自定义 class)指定细节是否有意义(如果它们从未被评估过) )?另外,为什么 WPF 会这样 - 这不是潜在的性能杀手吗?

我的经验是,如果您在 AddRemove 操作中提供了错误的索引或多个元素,WPF 将引发异常。

除此之外,还有一系列框架(NMF 表达式、BindableLINQ、ContinuousLinq、Obtics)利用这些 CollectionChanged 事件来实现 INotifyCollectionChanged 查询。这些框架将严重依赖于您在事件中输入的细节,尽管您当然可以随时求助于重置事件。

如果我在最后的回答中没有说清楚,我很抱歉。实际上,WPF 的行为根据 NotifyCollectionChangedEventArgs 的具体情况而定,而 IndexedEnumerable 只是一个工具,可以让 CollectionView 或 WPF 的其他组件访问未访问的源集合轻松实现 IList throughh 索引。比如你绑定一个集合到ItemsControl.ItemsSource后,就会出现下面的情况。

  1. ItemsControl 将指定集合作为其 Items 属性.
  2. 的来源
  3. Items 属性 是一个 ItemCollection 将通过调用 CollectionViewSource.GetDefaultCollectionView 方法获得 CollectionView
  4. 视图将尝试订阅源集合的 CollectionChanged 事件并采取相应行动。
  5. ItemCollection 也将订阅视图的 CollectionChanged 事件并采取相应行动。
  6. 此外,ItemsControl 订阅 ItemsCollectionChanged 事件,并从一开始就采取相应行动。

因此,您的问题的答案是很多 WPF 类 正在使用 NotifyCollectionChangedEventArgs' 功能,您肯定需要通过提供所有详细信息来正确地触发 CollectionChanged 事件无论您收集的内容是否已实施 IList

看看我的 ObservableComputations 图书馆。该库非常广泛地使用 NotifyCollectionChangedEventArgs。