INotifyPropertyChanged 与双向绑定
INotifyPropertyChanged vs Two way binding
我是 c# 的新手,我想知道为什么我们在使用 TwoWay 绑定时必须实现 INotifyPropertyChanged 接口??并且对于 OneWay 也是 ??
谢谢
实施 INotifyPropertyChanged
仅提供 classes(实施者除外)对 属性 变化做出反应的可能性。
如果没有实现该接口,这是不可能的,因为如果一个 class 实例,比如说 A
在 B
上设置一个 属性,第三个 class 实例 C
无法跟踪该信息。设置 属性 现在只是 A
和 B
的一个问题。但是,如果 C
知道 B
确实实现了 INotifyPropertyChanged
,它可以简单地向事件 PropertyChanged
添加一个事件处理程序(它是接口的一部分)并对其做出反应 -仍然希望 B
能按预期抛出事件。
绑定需要该信息来更新模型(数据)或视图,具体取决于更改发生的位置。所以基本上,它们是 C
监听其他对象的变化 (A
& B
)。
INotifyPropertyChanged,顾名思义就是通知你的客户你的属性已经改变了,见MSDN
当属性发生变化时,您将需要它来更新您的 UI。
OneWay(源到目标):属性更改将导致 UI 更新并且 UI 操作不会导致 属性 更改。 *
TwoWay(Both way): Proerty和UI是完全绑定的,任何一个改变都会影响另一个。
在这种情况下,只要您为 属性 实现 INotifyPropertyChanged,绑定就可以工作。
如果不这样做,即使使用 Twoway 也不会改变。
为了支持 OneWay/TwoWay 绑定,基础数据 必须 实现 INotifyPropertyChanged.
那么OneWay/TwoWay绑定就是选择绑定方向,你可以在这里找到更多:
Various wpf binding modes
我是 c# 的新手,我想知道为什么我们在使用 TwoWay 绑定时必须实现 INotifyPropertyChanged 接口??并且对于 OneWay 也是 ??
谢谢
实施 INotifyPropertyChanged
仅提供 classes(实施者除外)对 属性 变化做出反应的可能性。
如果没有实现该接口,这是不可能的,因为如果一个 class 实例,比如说 A
在 B
上设置一个 属性,第三个 class 实例 C
无法跟踪该信息。设置 属性 现在只是 A
和 B
的一个问题。但是,如果 C
知道 B
确实实现了 INotifyPropertyChanged
,它可以简单地向事件 PropertyChanged
添加一个事件处理程序(它是接口的一部分)并对其做出反应 -仍然希望 B
能按预期抛出事件。
绑定需要该信息来更新模型(数据)或视图,具体取决于更改发生的位置。所以基本上,它们是 C
监听其他对象的变化 (A
& B
)。
INotifyPropertyChanged,顾名思义就是通知你的客户你的属性已经改变了,见MSDN
当属性发生变化时,您将需要它来更新您的 UI。
OneWay(源到目标):属性更改将导致 UI 更新并且 UI 操作不会导致 属性 更改。 *
TwoWay(Both way): Proerty和UI是完全绑定的,任何一个改变都会影响另一个。
在这种情况下,只要您为 属性 实现 INotifyPropertyChanged,绑定就可以工作。
如果不这样做,即使使用 Twoway 也不会改变。
为了支持 OneWay/TwoWay 绑定,基础数据 必须 实现 INotifyPropertyChanged.
那么OneWay/TwoWay绑定就是选择绑定方向,你可以在这里找到更多:
Various wpf binding modes