【问题标题】:INotifyPropertyChanged vs Two way bindingINotifyPropertyChanged 与两种方式绑定
【发布时间】:2017-11-18 22:39:47
【问题描述】:

我是 c# 的新手,我想知道为什么我们在使用 TwoWay 绑定时必须实现 INotifyPropertyChanged 接口?而对于 OneWay 也是?

谢谢

【问题讨论】:

  • INotifyPropertyChanged 基本上是“让视图知道”代码已更改某些内容,并且需要更新视觉对象以反映更改。 TwoWay 绑定意味着可以从任一代码或视图更改值。此链接可以提供更多帮助:WPF Binding One Way and Two Way 和 MSDN Binding.Mode Property
  • 但在定义中,TwoWay 更新目标属性或目标属性或源属性更改时的属性
  • 如果您的属性在代码中没有更改,并且仅在定义了双向绑定的视图中更改,那么您不需要 INotifyPropertyChanged。示例案例是一个 TextBox,绑定可以正常工作 - TextBox 将在设置 DataContext 时读取初始值,并在视图中发生更改时通知属性。

标签: c# .net data-binding inotifypropertychanged


【解决方案1】:

简而言之,要支持 OneWay/TwoWay 绑定,底层数据必须实现 INotifyPropertyChanged

那么OneWay/TwoWay绑定只是选择绑定方向,你可以在这里找到更多:

Various wpf binding modes

【讨论】:

    【解决方案2】:

    实现INotifyPropertyChanged 只是为类(实现它的类除外)提供了对属性更改做出反应的可能性。

    如果没有实现该接口,这是不可能的,因为如果一个类实例,比如AB 上设置一个属性,第三个类实例C 就无法跟踪该信息。设置该属性现在只是AB 的关注点。如果Chowever 知道B 确实实现了INotifyPropertyChanged,它可以简单地将事件处理程序添加到事件PropertyChanged(它是接口的一部分)并对其做出反应——仍然希望B 会抛出事件符合预期。

    绑定需要这些信息来更新模型(数据)或视图,具体取决于更改发生的位置。所以基本上,它们是C 监听其他对象的变化(A & B)。

    【讨论】:

      【解决方案3】:

      INotifyPropertyChanged,和名字一样,是通知你的客户你的属性发生了变化,见MSDN

      当属性更改时,您将需要它来更新您的 UI。


      OneWay(Source to Target):Propertychange 会导致 UI 更新,UI 操作不会导致 propertychange。 *

      TwoWay(双向):Proerty 和 UI 完全绑定,其中任何一个更改都会影响另一个。

      在这种情况下,只要您为您的属性实现 INotifyPropertyChanged,绑定就可以工作。

      如果你不这样做,即使你使用 Twoway,也不会改变任何事情。

      【讨论】:

        猜你喜欢
        • 2020-07-07
        • 1970-01-01
        • 1970-01-01
        • 2013-11-29
        • 2012-06-12
        • 2016-02-27
        • 2011-04-09
        • 1970-01-01
        • 2017-09-05
        相关资源
        最近更新 更多