首页 > 解决方案 > WPF 如何处理自定义集合的 CollectionChanged 事件?

问题描述

我有一些自定义类包装/表示我想用于 WPF 数据绑定的集合。我可以确定的最低要求是该类需要实现IEnumerableINotifyCollectionChanged.

在整理NotifyCollectionChangedEventArgs用于引发CollectionChanged事件的同时,我想知道要使用什么,newIndex因为oldIndex我的班级不支持IList并且没有索引功能。

这让我想到了我的问题:

如果类没有实现IList,WPF 框架会在监听时CollectionChanged忽略该动作并总是像该动作一样做出反应Reset吗?如果没有,他们是如何做到的(以及我应该使用什么newIndex和/或oldIndex)?

标签: c#wpfdata-binding

解决方案


CollectionChanged答案是即使集合没有实现IList接口,WPF 也会监听并采取相应的行动。WPF 会将数据集合映射到其视图,并且视图始终创建一个IndexedEnumerable包装器以确保它可以通过索引访问集合。因此,如果将集合绑定到 WPF 实现的依赖属性(如ItemsControl.ItemsSource),则无需实现IList即可INotifyCollectionChanged工作。但是如果你将一个集合绑定到你自己的属性上,而不是直接使用源,你应该使用CollectionViewSource.


推荐阅读