【发布时间】:2011-03-03 19:37:05
【问题描述】:
我想我对 BindingSource 类的作用非常了解 - 即在数据源和 UI 控件之间提供一个间接层。它实现了 IBindingList 接口,因此还提供了对排序的支持。而且我已经使用它足够频繁,没有太多问题。但我想知道我是否经常使用它。也许举个例子会有所帮助。
假设我在表单上只有一个简单的文本框(使用 WinForms),我想将该文本框绑定到返回字符串的类中的一个简单属性。在这种情况下是否值得使用 BindingSource?
现在假设我的表单上有一个网格,我想将它绑定到一个 DataTable。我现在应该使用 BindingSource 吗?
在后一种情况下,我可能不使用 BindingSource,因为据我所知,DataTable 提供了与 BindingSource 本身相同的功能。当添加、删除行等时,DataTable 将触发正确的事件,以便网格自动更新。
但在文本框绑定到字符串的第一种情况下,我可能会让包含字符串属性的类实现 INotifyPropertyChanged,以便在字符串更改时触发 PropertyChanged 事件。我会使用 BindingSource 以便它可以侦听这些 PropertyChanged 事件,以便在字符串更改时自动更新文本框。
到目前为止,这听起来如何?我仍然觉得我的理解存在差距,这使我无法看到整个画面。到目前为止,这是一个相当模糊的问题,所以我会尝试提出一些更具体的问题——理想情况下,答案将参考上述示例或类似的内容......
(1) 在上述任一示例中是否值得使用 BindingSource?
(2) 开发人员似乎只是“假设”DataTable 类会做正确的事情,在正确的时间触发 PropertyChanged 事件。如何知道数据源是否能够做到这一点?是否存在数据源应实现的特定接口,以便开发人员能够承担这种行为?
(3) 在考虑是否使用 BindingSource 时,绑定什么 Control 是否重要?还是只有数据源会影响决策?也许答案是(这似乎很合乎逻辑):控件需要足够智能以侦听 PropertyChanged 事件,否则需要 BindingSource。那么如何判断 Control 是否有能力做到这一点呢?同样,是否有开发人员可以寻找的特定接口,控件必须实现?
在过去,正是这种困惑导致我总是使用 BindingSource。但我想更准确地了解何时使用它,以便仅在必要时才这样做。
【问题讨论】:
-
我认为这是一个很好的问题(相关问题列表),但不知何故未能真正得到体面的答案。
标签: .net winforms data-binding bindingsource