Windows 窗体数据绑定中的更改通知
Windows 窗体数据绑定最重要的概念之一是更改通知。 为确保数据源和绑定控件始终具有最新数据,必须为数据绑定添加更改通知。 具体来说,你希望确保绑定控件在对其数据源进行更改时得到通知,并且数据源在对控件的绑定属性进行更改时得到通知。
根据数据绑定的类型,有不同类型的更改通知:
简单绑定,其中单个控件属性绑定到对象的单个实例。
基于列表的绑定,它可以包括绑定到列表中项属性的单个控件属性或绑定到对象列表的控件属性。
此外,如果正在创建要用于数据绑定的 Windows 窗体控件,则必须将 PropertyNameChanged 模式应用于控件,以便将对控件绑定属性的更改传播到数据源。
简单绑定的更改通知
对于简单绑定,业务对象必须在绑定属性的值更改时提供更改通知。 可以通过以下方式实现此目的:为业务对象的每个属性公开 PropertyNameChanged 事件并使用 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 接口引发更改通知。
自定义控件的更改通知
最后,在控件端,必须为每个旨在绑定到数据的属性公开一个 PropertyNameChanged 事件。 然后将对控件属性的更改传播到绑定的数据源。 有关详细信息,请参阅如何:应用 PropertyNameChanged 模式