Windows 窗体数据绑定中的更改通知
Windows 窗体数据绑定的最重要的概念之一是“更改通知”。 为了确保数据源及绑定控件总是具有最新的数据,必须为数据绑定添加更改通知。 具体地说,您希望确保绑定控件收到对其数据源所做更改的通知,并希望数据源收到对控件的绑定属性所做更改的通知。
根据数据绑定类型的不同,存在不同类型的更改通知:
简单绑定,即单个控件属性绑定到单个对象实例。
基于列表的绑定,既可以包括绑定到列表中某一项的属性的单个控件属性,也可以包括绑定到对象列表的控件属性。
此外,如果要创建希望用于数据绑定的 Windows 窗体控件,则必须将属性名称Changed 模式应用于这些控件,以便将对控件的绑定属性进行的更改传播到数据源。
简单绑定的更改通知
对于简单绑定,当绑定属性的值发生更改时,业务对象必须提供更改通知。 通过为业务对象的每个属性公开属性名称Changed 事件,并使用 BindingSource 或使用首选方法(在该方法中,业务对象实现 INotifyPropertyChanged 接口,并在属性值发生更改时引发 PropertyChanged 事件)将业务对象绑定到控件,可以实现此目的。 有关更多信息,请参见如何:实现 INotifyPropertyChanged 接口。 当使用实现 INotifyPropertyChanged 接口的对象时,不必使用 BindingSource 将对象绑定到控件,而是推荐使用 BindingSource。
基于列表的绑定的更改通知
Windows 窗体根据绑定列表,向绑定控件提供属性更改(列表项属性值的更改)和列表更改(删除项或向列表添加项)信息。 因此,用于数据绑定的列表必须实现 IBindingList,该接口提供两种类型的更改通知。 BindingList<T> 是 IBindingList 的泛型实现,专用于 Windows 窗体数据绑定。 可以创建一个 BindingList<T>,其中包含实现 INotifyPropertyChanged 的业务对象类型,该列表自动将 PropertyChanged 事件转换为 ListChanged 事件。 如果绑定列表不是 IBindingList,则必须使用 BindingSource 组件将对象列表绑定到 Windows 窗体控件。 BindingSource 组件将提供与 BindingList<T> 的属性到列表的转换类似的属性到列表的转换。 有关更多信息,请参见 如何:使用 BindingSource 和 INotifyPropertyChanged 接口引发更改通知。
自定义控件的更改通知
最后,在控件方面,必须为设计用于绑定到数据的每个属性公开属性名称Changed 事件。 对控件属性的更改然后将传播到绑定的数据源。 有关更多信息,请参见 如何:应用 PropertyNameChanged 模式