我认为我已经足够了解BindingSource类的作用 - 即在数据源和UI控件之间提供一个间接层。它实现了IBindingList接口,因此也支持排序。我已经经常使用它,没有太多问题。但我想知道我是否过度使用它。也许举个例子会有所帮助。
假设我在一个窗体上只有一个简单的文本框(使用WinForms),我想将该文本框绑定到一个返回字符串的简单类内部的属性上。在这种情况下,使用BindingSource是否值得呢?
现在假设我的表格上,我想将其绑定到一个DataTable。现在应该使用BindingSource吗?
对于后一种情况,我可能不会使用BindingSource,因为根据我所了解的,DataTable提供了BindingSource本身提供的相同功能。DataTable会在添加、删除等操作时触发正确的事件,使得表格自动更新。
但在第一种情况下,当文本字符串发生变化时,我可能会让包含该字符串属性的类实现INotifyPropertyChanged接口,以便在字符串更改时触发PropertyChanged事件。我将使用BindingSource,以便它可以监听这些PropertyChanged事件,从而在字符串更改时自动更新文本框。
到目前为止,这听起来怎么样?我仍然感觉有一些理解上的差距阻止我看到整个图景。迄今为止,这是一个相当模糊的问题,因此我将尝试提出一些更具体的问题 - 理想情况下,答案将参考上述示例或类似内容......
(1)在以上任何一个示例中使用BindingSource是否值得?
(2)开发人员似乎只是“假设”DataTable类会在正确的时间触发PropertyChanged事件。如何知道数据源是否能够实现这一点?是否有特定的接口应该实现,以便开发人员能够假定这种行为?
(3) 当考虑是否使用BindingSource时,被绑定的控件是否重要呢?或者只有数据源应该影响决策吗?也许答案是(这似乎很合理):控件需要足够智能地监听PropertyChanged事件,否则需要使用BindingSource。那么如何判断控件是否具备这样的功能呢?开发人员可以寻找特定的接口吗?
过去,正是由于这种困惑,我总是使用BindingSource。但我希望更好地了解什么时候使用它,以便仅在必要时这样做。