Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 谁使用NotifyCollectionChangedEventArgs';特征?_C#_Wpf_Inotifycollectionchanged - Fatal编程技术网

C# 谁使用NotifyCollectionChangedEventArgs';特征?

C# 谁使用NotifyCollectionChangedEventArgs';特征?,c#,wpf,inotifycollectionchanged,C#,Wpf,Inotifycollectionchanged,这是我问题的后续行动 根据Alex.Wei的回答(以及源代码),WPF忽略了NotifyCollectionChangedEventArgs(例如操作)的细节,并且总是做出相同的反应,最终好像操作==重置 因此,我的问题是:谁使用了NotifyCollectionChangedEventArgs”功能,如果我手动引发事件(对于自定义类),指定细节(如果从未对其进行评估)是否有意义?另外,为什么WPF会这样做?这不是一个潜在的性能杀手吗?我的经验是,如果在添加或删除操作中提供了错误的索引或多个元素

这是我问题的后续行动

根据Alex.Wei的回答(以及源代码),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控件
    subscribe
    CollectionChanged
    事件的
    并从一开始就相应地采取行动

  • 因此,对您的问题的答案是,许多WPF类都在使用
    NotifyCollectionChangedEventArgs
    ”功能,您肯定需要正确地使用
    CollectionChanged
    事件,无论您的集合是否实现
    IList

    查看我的库。该库非常广泛地使用NotifyCollectionChangedEventArgs。

    如果我没有使用任何其他框架(WPF除外),那么我最好总是使用
    Action=Reset
    。还有:关于为什么和潜在性能受到影响的任何见解?“指定细节有意义吗?”-正确实现接口而不是依赖事件消费者不看细节不会有什么坏处。你不能肯定有一天WPF会做不到。@Clemens:一般来说,我当然同意,但在我的特定场景中(包装一本不可索引的词典),实现全部细节将是相当痛苦的,即使是可行的。