【问题标题】:what is the difference between TwoWay databinding and ObservableCollection?双向数据绑定和 ObservableCollection 有什么区别?
【发布时间】:2011-04-23 05:44:56
【问题描述】:

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

提前致谢:)

【问题讨论】:

    标签: wpf silverlight data-binding observablecollection


    【解决方案1】:

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

    事实上,您可以使用不带 ObservableCollections 的 TwoWay 数据绑定和不带数据绑定的 ObservableCollections。

    数据绑定是一种机制,允许您将业务对象属性(通常是 ViewModel 属性)绑定到 UI 属性。 OneWay 数据绑定支持在对象更改时更新 UI(这需要在业务对象上实现 INotifyPropertyChanged 和/或 INotifyCollectionChanged)。顾名思义,TwoWay 数据绑定提供双向支持:Object => UI(就像 OneWay 一样)和 UI => Object。对象更新的 UI 不需要实现 INotifyCollectionChanged 或 INotifyPropertyChanged。

    Observable 集合现在很有趣,因为它实现了 INotifyCollectionChanged,这使它成为创建数据绑定集合的理想选择。但是我经常使用没有数据绑定的 INotifyCollectionChanged,我很确定你可以找到其他实现 INotifyCollectionChanged 的​​集合(如 PagedCollectionView)

    它回答了你的问题吗?

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • - MyCollection 是 ObservableCollection 的实例是什么?那么它会更新引用还是内容呢?
      • 如果您在更改对集合的引用时调用 OnNotyfyPropertyChanged("MyCollection"),则 WPF 将跟踪引用和内容更改。
      【解决方案3】:

      这个问题有点像“马和车有什么区别?”

      ObservableCollection 可用于双向数据绑定(到 ItemsControl)。
      它或多或少旨在简化数据绑定。

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

      【讨论】:

        【解决方案4】:

        对象需要实现INotifyPropertyChanged,以便您能够绑定到该对象的属性。

        TwoWayDatabinding 告诉数据绑定引擎它需要双向更新属性。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-19
          • 2011-08-27
          • 2012-12-02
          相关资源
          最近更新 更多