我想要有一个域模型集合类和一个视图模型类,它们只是反映和投影域模型的元素--但它本身是只读的。
我在这里的想法是,这两种类型都实现了INotifyCollectionChanged接口和视图模型类型,然后充当代理和投影仪,将模型元素包装在元素视图模型类型中。
问题是:实现INotifyCollectionChanged是否足以将WPF数据绑定到DataGrid或ListView,或者启用基于集合的数据绑定所需的最小接口集是多少?
发布于 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
https://stackoverflow.com/questions/15260240
复制相似问题