首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对INotifyCollectionChanged类型的数据绑定

针对INotifyCollectionChanged类型的数据绑定
EN

Stack Overflow用户
提问于 2013-03-07 07:29:22
回答 1查看 1.7K关注 0票数 2

我想要有一个域模型集合类和一个视图模型类,它们只是反映和投影域模型的元素--但它本身是只读的。

我在这里的想法是,这两种类型都实现了INotifyCollectionChanged接口和视图模型类型,然后充当代理和投影仪,将模型元素包装在元素视图模型类型中。

问题是:实现INotifyCollectionChanged是否足以将WPF数据绑定到DataGrid或ListView,或者启用基于集合的数据绑定所需的最小接口集是多少?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-07 07:54:17

如果集合中元素中的属性发生更改,则INotifyCollectionChanged不会更新您的UI,只有在向集合中添加或从集合中删除整个元素时才会更新。

因此,如果您乐于只跟踪整个元素的更改,那么INotifyCollectionChanged就足够了,任何进一步的粒度都可以,并且您需要在属性设置器中实现INotifyPropertyChanged

另一点值得注意的是,如果您使用ObservableCollection来存放列表,那么它已经为您实现了INotifiyCollectionChanged

编辑:

以下是微软的观点:

您可以枚举任何实现IEnumerable接口的集合。但是,若要设置动态绑定以使集合中的插入或删除操作自动更新UI,则集合必须实现INotifyCollectionChanged接口。此接口公开一个事件,该事件应在基础集合更改时引发。

WPF提供了ObservableCollection(Of T)类,该类是公开INotifyCollectionChanged接口的数据集合的内置实现。

请注意,若要完全支持将数据值从源对象传输到目标对象,集合中支持可绑定属性的每个对象也必须实现INotifyPropertyChanged接口。

在实现您自己的集合之前,请考虑使用ObservableCollection(Of T)或现有的集合类之一,如List(Of T)Collection(Of T)BindingList(Of T)等。如果您有一个高级方案,并且希望实现自己的集合,请考虑使用IList,它提供了一个非泛型对象集合,可以通过索引单独访问这些对象,从而获得最佳性能。

从..

http://msdn.microsoft.com/en-us/library/ms752347.aspx#binding_to_collections

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15260240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档