c# - 为什么ControlBindingsCollection.Add的数据源是一个对象而不是INotifyPropertyChanged?

标签 c# .net winforms data-binding

关于the method

ControlBindingsCollection.Add Method (String, Object, String, Boolean, DataSourceUpdateMode, Object)

第二个参数是dataSource,类型为object

根据我的测试,此 dataSource 必须实现接口(interface) INotifyPropertyChanged,否则绑定(bind)将无法工作。

我的问题是,为什么在该方法中,它采用 dataSourceObject,而不是 INotifyPropertyChanged?是否有其他方法可以在不继承 INotifyPropertyChanged 的情况下进行绑定(bind)?

我在网上搜索过,但找不到任何相关信息。

最佳答案

INotifyPropertyChanged 只是进行双向数据绑定(bind)所必需的。在使用单向数据绑定(bind)的情况下,对象不需要实现 INotifyPropertyChanged:

  • 单向数据绑定(bind):控件更改将推送到数据源。

  • 双向数据绑定(bind):除了单向之外,数据源更改将推送到控制。

以下是双向数据绑定(bind)的工作原理:

Binding 对象,订阅绑定(bind)属性的PropertyDescriptorValueChanged 事件。 PropertyDescriptor 检查容器对象是否为 INotifyPropertyChanged,然后订阅其 PropertyChanged 以引发 ValueChanged 事件。这样,实现 INotifyPropertyChanged 将通知 Binding 对象有关数据源属性值的更改。然后绑定(bind)会提取数据并更新绑定(bind)的控件属性。

关于c# - 为什么ControlBindingsCollection.Add的数据源是一个对象而不是INotifyPropertyChanged?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48758673/

相关文章:

c# - MvvmCross:IoC 和 ServiceLocation 性能

.net - Windows如何决定是触发MouseUp还是Click?

.net - 如何在 C# 中确定面板的完整大小(包括滚动条)

c# - 使用 Entity Framework 保存组合框值时出现问题

c# - 将系统默认上下文菜单添加到无边框 Windows 窗体

c# - 正则表达式在 C# 中不能准确工作

c# - 如何在 LINQ 中比较日期(Likewise Like 在 SQL 查询中)

c# - Async/Await vs Parallel.For,在这种情况下哪个更好?

c# - 在 VS 2017 中针对完整的 .net 框架 asp.net 核心项目运行 XUnit 2.2.0 单元测试时出现 System.BadImageFormatException

c# - 整数除法