ControlBindingsCollection.Add Method (String, Object, String, Boolean, DataSourceUpdateMode, Object)
第二个参数是dataSource
,类型为object
。
根据我的测试,此 dataSource
必须实现接口(interface) INotifyPropertyChanged
,否则绑定(bind)将无法工作。
我的问题是,为什么在该方法中,它采用 dataSource
的 Object
,而不是 INotifyPropertyChanged
?是否有其他方法可以在不继承 INotifyPropertyChanged
的情况下进行绑定(bind)?
我在网上搜索过,但找不到任何相关信息。
最佳答案
INotifyPropertyChanged
只是进行双向数据绑定(bind)所必需的。在使用单向数据绑定(bind)的情况下,对象不需要实现 INotifyPropertyChanged:
单向数据绑定(bind):控件更改将推送到数据源。
双向数据绑定(bind):除了单向之外,数据源更改将推送到控制。
以下是双向数据绑定(bind)的工作原理:
Binding
对象,订阅绑定(bind)属性的PropertyDescriptor
的ValueChanged
事件。 PropertyDescriptor
检查容器对象是否为 INotifyPropertyChanged
,然后订阅其 PropertyChanged
以引发 ValueChanged
事件。这样,实现 INotifyPropertyChanged
将通知 Binding
对象有关数据源属性值的更改。然后绑定(bind)会提取数据并更新绑定(bind)的控件属性。
关于c# - 为什么ControlBindingsCollection.Add的数据源是一个对象而不是INotifyPropertyChanged?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48758673/