C# 谁使用NotifyCollectionChangedEventArgs';特征?
这是我问题的后续行动 根据Alex.Wei的回答(以及源代码),WPF忽略了C# 谁使用NotifyCollectionChangedEventArgs';特征?,c#,wpf,inotifycollectionchanged,C#,Wpf,Inotifycollectionchanged,这是我问题的后续行动 根据Alex.Wei的回答(以及源代码),WPF忽略了NotifyCollectionChangedEventArgs(例如操作)的细节,并且总是做出相同的反应,最终好像操作==重置 因此,我的问题是:谁使用了NotifyCollectionChangedEventArgs”功能,如果我手动引发事件(对于自定义类),指定细节(如果从未对其进行评估)是否有意义?另外,为什么WPF会这样做?这不是一个潜在的性能杀手吗?我的经验是,如果在添加或删除操作中提供了错误的索引或多个元素
NotifyCollectionChangedEventArgs
(例如操作
)的细节,并且总是做出相同的反应,最终好像操作==重置
因此,我的问题是:谁使用了
NotifyCollectionChangedEventArgs
”功能,如果我手动引发事件(对于自定义类),指定细节(如果从未对其进行评估)是否有意义?另外,为什么WPF会这样做?这不是一个潜在的性能杀手吗?我的经验是,如果在添加或删除操作中提供了错误的索引或多个元素,WPF将引发异常
除此之外,还有一系列框架(NMF表达式、BindableLINQ、ContinuousLinq、Obtics)利用这些CollectionChanged事件在查询中实现INotifyCollectionChanged
。这些框架在很大程度上依赖于您在事件中输入的详细信息,尽管您当然可以总是求助于重置事件。如果我在上一次会议上没有把事情说清楚,我很抱歉。实际上,WPF的行为符合notifycollectionchangedventargs
的具体含义,并且IndexedEnumerable
只是一个工具,它允许CollectionView
或WPF的其他组件通过索引轻松访问未实现IList
的源集合。例如,将集合绑定到ItemsControl.ItemsSource
后,将发生以下情况
ItemsControl
将指定集合作为其Items
属性的源
Items
属性是ItemCollection
将通过调用CollectionViewSource.GetDefaultCollectionView
方法获得CollectionView
视图将尝试订阅源集合的CollectionChanged
事件,并相应地采取行动
ItemCollection
还将订阅视图的CollectionChanged
事件并相应地执行操作
而且,Items控件
subscribeCollectionChanged
事件的项
并从一开始就相应地采取行动
因此,对您的问题的答案是,许多WPF类都在使用NotifyCollectionChangedEventArgs
”功能,您肯定需要正确地使用CollectionChanged
事件,无论您的集合是否实现IList
。查看我的库。该库非常广泛地使用NotifyCollectionChangedEventArgs。如果我没有使用任何其他框架(WPF除外),那么我最好总是使用Action=Reset
。还有:关于为什么和潜在性能受到影响的任何见解?“指定细节有意义吗?”-正确实现接口而不是依赖事件消费者不看细节不会有什么坏处。你不能肯定有一天WPF会做不到。@Clemens:一般来说,我当然同意,但在我的特定场景中(包装一本不可索引的词典),实现全部细节将是相当痛苦的,即使是可行的。