谁使用NotifyCollectionChangedEventArgs的功能?

时间:2018-08-01 07:51:49

标签: c# wpf inotifycollectionchanged

这是我的问题How does WPF handle CollectionChanged events for custom collections?的后续行动。

根据Alex.Wei的回答(以及IndexedEnumerable的源代码),WPF忽略了NotifyCollectionChangedEventArgs(例如Action)的细节,并且总是做出相同的反应,最终好像{ {1}}。

所以我的问题是:谁使用Action == Reset'功能,并且如果我手动引发事件(对于自定义类),指定细节(如果从未评估过)是否有意义?另外,为什么WPF会如此表现-这不是潜在的性能杀手吗?

3 个答案:

答案 0 :(得分:1)

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

除此之外,还有一系列框架(NMF表达式,BindableLINQ,ContinuousLinq,Obtics)利用这些CollectionChanged事件来对查询实现INotifyCollectionChanged。这些框架将在很大程度上取决于您在事件中添加的详细信息,尽管您当然可以始终诉诸重置事件。

答案 1 :(得分:1)

很抱歉,如果我在上一个答案中没有弄清楚。实际上,WPF会按照NotifyCollectionChangedEventArgs的特定方式进行操作,就像它的意思一样,并且IndexedEnumerable只是一种工具,可让CollectionView或WPF的其他组件访问未访问的源集合通过索引轻松实现IList。例如,将集合绑定到ItemsControl.ItemsSource之后,下面的事情就会发生。

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

因此,对您的问题的答案是,许多WPF类都在使用Items'功能,并且您肯定需要通过提供所有详细信息来正确地消除NotifyCollectionChangedEventArgs事件{是否{1}}。

答案 2 :(得分:0)

看看我的ObservableComputations库。该库广泛使用NotifyCollectionChangedEventArgs。