两种方式的数据绑定和ObservableCollection有什么区别?

时间:2010-10-09 09:05:54

标签: wpf silverlight data-binding observablecollection

当我读到ObservableCollection时,我开始知道它实现了INotifyPropertyChanged,这意味着每当视图发生变化时,它的底层集合也会自动更新,这正是TwoWay数据绑定的目的。那么,ObservableCollection和TwoWay数据绑定有什么区别?

提前致谢:)

4 个答案:

答案 0 :(得分:3)

两个“事物”TwoWay数据绑定和ObservableCollection是可以协作但不直接链接的不同事物。数据绑定是一个概念,ObservableCollection是一个接口(INotifyCollectionChanged)的实现,它用于实现.NET框架中的数据绑定概念。 INotifyCollectionChanged本身就是这个实现的一小部分。

实际上,您可以在没有ObservableCollections和ObservableCollections的情况下使用TwoWay数据绑定而无需数据绑定。

数据绑定是一种机制,允许您将业务对象属性(通常是ViewModel属性)绑定到UI属性。 OneWay数据绑定在对象更改时提供对UI更新的支持(这需要在业务对象上实现INotifyPropertyChanged和/或INotifyCollectionChanged)。 TwoWay数据绑定提供了双向支持,因为它的名字表明它:Object =>用户界面(如OneWay)和UI =>宾语。 UI到对象更新不需要实现INotifyCollectionChanged也不需要实现INotifyPropertyChanged。

Observable collection现在很有意思,因为它实现了INotifyCollectionChanged,这使它成为创建数据表可收集集合的一个很好的候选者。但我经常使用INotifyCollectionChanged没有数据绑定,我很确定你可以找到其他实现INotifyCollectionChanged的集合(如PagedCollectionView)

它能回答你的问题吗?

答案 1 :(得分:2)

如果您绑定到您的集合,如{Binding Path = MyCollection,Mode = TwoWay},那么对集合的引用将会更新,但不会更新其内容。 Observable collection允许跟踪其内容更改,但不会引用更改(MyCollection.Clear()将触发UI更新,但MyCollection = anotherInstance不会)。

答案 2 :(得分:1)

问题有点像“马和车之间有什么区别?”

ObservableCollection可用于TwoWay数据绑定(到ItemsControl) 它或多或少的设计使数据绑定变得容易。

每当Control更新ObservableCollection或其他方式时,中间都有一个DataBinding。

答案 3 :(得分:1)

对象需要实现INotifyPropertyChanged,因此您可以绑定到此对象的属性。

TwoWayDatabinding告诉数据绑定引擎它需要以两种方式更新属性。

您正在比较苹果和飞机。这是两个完全不同的东西。 此外,ObservableCollection还实现了INotifyCollectionChanged,它允许通知其项目已更改,而不仅仅是属性。