c# - WPF 如何处理自定义集合的 CollectionChanged 事件?
问题描述
我有一些自定义类包装/表示我想用于 WPF 数据绑定的集合。我可以确定的最低要求是该类需要实现IEnumerable
和INotifyCollectionChanged
.
在整理NotifyCollectionChangedEventArgs
用于引发CollectionChanged
事件的同时,我想知道要使用什么,newIndex
因为oldIndex
我的班级不支持IList
并且没有索引功能。
这让我想到了我的问题:
如果类没有实现IList
,WPF 框架会在监听时CollectionChanged
忽略该动作并总是像该动作一样做出反应Reset
吗?如果没有,他们是如何做到的(以及我应该使用什么newIndex
和/或oldIndex
)?
解决方案
CollectionChanged
答案是即使集合没有实现IList
接口,WPF 也会监听并采取相应的行动。WPF 会将数据集合映射到其视图,并且视图始终创建一个IndexedEnumerable
包装器以确保它可以通过索引访问集合。因此,如果将集合绑定到 WPF 实现的依赖属性(如ItemsControl.ItemsSource
),则无需实现IList
即可INotifyCollectionChanged
工作。但是如果你将一个集合绑定到你自己的属性上,而不是直接使用源,你应该使用CollectionViewSource
.
推荐阅读
- firebase - 如何重新验证域?
- django - 有没有办法从 API 中隐藏一些默认路由,但不是全部?
- python - Python 用 Panda 解析 csv 中的字符串值
- postgresql - 使用检查选项 Postgresql
- c++ - netbeans 0xc00007b 上的 C++
- sed - 使用 sed 删除两个字符之间的行
- google-cloud-platform - 如何选择 Google Storage 存储分区作为 Cloud Run 触发器的特定资源?
- flutter - Flutter 调用存储值
- angular - Angular 组件导入 TypeScript 类导致开玩笑失败
- javascript - 怎么把图片放在屏幕中间