谁使用 NotifyCollectionChangedEventArgs 的功能?
Who uses NotifyCollectionChangedEventArgs' features?
这是我的问题 的后续问题。
根据 Alex.Wei 的回答(以及 IndexedEnumerable 的源代码)WPF 忽略了 NotifyCollectionChangedEventArgs
的细节(例如 Action
)并且总是对相同,最终就好像 Action == Reset
.
所以我的问题是:谁使用 NotifyCollectionChangedEventArgs
' 功能,如果我手动引发事件(对于自定义 class)指定细节是否有意义(如果它们从未被评估过) )?另外,为什么 WPF 会这样 - 这不是潜在的性能杀手吗?
我的经验是,如果您在 Add
或 Remove
操作中提供了错误的索引或多个元素,WPF 将引发异常。
除此之外,还有一系列框架(NMF 表达式、BindableLINQ、ContinuousLinq、Obtics)利用这些 CollectionChanged 事件来实现 INotifyCollectionChanged
查询。这些框架将严重依赖于您在事件中输入的细节,尽管您当然可以随时求助于重置事件。
如果我在最后的回答中没有说清楚,我很抱歉。实际上,WPF 的行为根据 NotifyCollectionChangedEventArgs
的具体情况而定,而 IndexedEnumerable
只是一个工具,可以让 CollectionView
或 WPF 的其他组件访问未访问的源集合轻松实现 IList
throughh 索引。比如你绑定一个集合到ItemsControl.ItemsSource
后,就会出现下面的情况。
ItemsControl
将指定集合作为其 Items
属性. 的来源
Items
属性 是一个 ItemCollection
将通过调用 CollectionViewSource.GetDefaultCollectionView
方法获得 CollectionView
。
- 视图将尝试订阅源集合的
CollectionChanged
事件并采取相应行动。
ItemCollection
也将订阅视图的 CollectionChanged
事件并采取相应行动。
- 此外,
ItemsControl
订阅 Items
的 CollectionChanged
事件,并从一开始就采取相应行动。
因此,您的问题的答案是很多 WPF 类 正在使用 NotifyCollectionChangedEventArgs
' 功能,您肯定需要通过提供所有详细信息来正确地触发 CollectionChanged
事件无论您收集的内容是否已实施 IList
。
看看我的 ObservableComputations 图书馆。该库非常广泛地使用 NotifyCollectionChangedEventArgs。
这是我的问题
根据 Alex.Wei 的回答(以及 IndexedEnumerable 的源代码)WPF 忽略了 NotifyCollectionChangedEventArgs
的细节(例如 Action
)并且总是对相同,最终就好像 Action == Reset
.
所以我的问题是:谁使用 NotifyCollectionChangedEventArgs
' 功能,如果我手动引发事件(对于自定义 class)指定细节是否有意义(如果它们从未被评估过) )?另外,为什么 WPF 会这样 - 这不是潜在的性能杀手吗?
我的经验是,如果您在 Add
或 Remove
操作中提供了错误的索引或多个元素,WPF 将引发异常。
除此之外,还有一系列框架(NMF 表达式、BindableLINQ、ContinuousLinq、Obtics)利用这些 CollectionChanged 事件来实现 INotifyCollectionChanged
查询。这些框架将严重依赖于您在事件中输入的细节,尽管您当然可以随时求助于重置事件。
如果我在最后的回答中没有说清楚,我很抱歉。实际上,WPF 的行为根据 NotifyCollectionChangedEventArgs
的具体情况而定,而 IndexedEnumerable
只是一个工具,可以让 CollectionView
或 WPF 的其他组件访问未访问的源集合轻松实现 IList
throughh 索引。比如你绑定一个集合到ItemsControl.ItemsSource
后,就会出现下面的情况。
ItemsControl
将指定集合作为其Items
属性. 的来源
Items
属性 是一个ItemCollection
将通过调用CollectionViewSource.GetDefaultCollectionView
方法获得CollectionView
。- 视图将尝试订阅源集合的
CollectionChanged
事件并采取相应行动。 ItemCollection
也将订阅视图的CollectionChanged
事件并采取相应行动。- 此外,
ItemsControl
订阅Items
的CollectionChanged
事件,并从一开始就采取相应行动。
因此,您的问题的答案是很多 WPF 类 正在使用 NotifyCollectionChangedEventArgs
' 功能,您肯定需要通过提供所有详细信息来正确地触发 CollectionChanged
事件无论您收集的内容是否已实施 IList
。
看看我的 ObservableComputations 图书馆。该库非常广泛地使用 NotifyCollectionChangedEventArgs。