.net 什么时候值得使用BindingSource?
我想我已经足够了解BindingSource类的功能了——即在数据源和UI控件之间提供一个间接层。它实现了IBindingList接口,因此也支持排序。我经常使用它,没有太多问题。但我想知道我是否比应该的更经常地使用它。也许举个例子会有所帮助 假设我在表单上只有一个简单的文本框(使用WinForms),我想将该文本框绑定到一个返回字符串的类中的简单属性。在这种情况下使用BindingSource值得吗 现在假设我的表单上有一个网格,我想将它绑定到一个数据表。我现在应该使用BindingSource吗 在后一种情况下,我可能不会使用BindingSource,因为从我收集的数据表中,它提供了与BindingSource本身相同的功能。DataTable将在添加、删除行时触发正确的事件,以便网格自动更新 但是在文本框绑定到字符串的第一种情况下,我可能会让包含字符串属性的类实现INotifyPropertyChanged,以便在字符串更改时触发PropertyChanged事件。我将使用BindingSource,以便它可以侦听这些PropertyChanged事件,以便在字符串更改时自动更新文本框 到目前为止这听起来怎么样?我仍然觉得在我的理解上有一个鸿沟,这阻碍了我看到整个画面。到目前为止,这是一个相当模糊的问题,因此我将尝试问一些更具体的问题-理想情况下,答案将参考上述示例或类似的内容 (1) 在上述两个示例中使用BindingSource是否值得 (2) 开发人员似乎只是“假设”DataTable类将在正确的时间触发PropertyChanged事件。如何知道数据源是否能够做到这一点?是否有一个数据源应该实现的特定接口,以便开发人员能够假设这种行为 (3) 在考虑是否使用BindingSource时,绑定到哪个控件是否重要?还是只有数据源会影响决策?也许答案是(这看起来很合乎逻辑):控件需要足够智能来侦听PropertyChanged事件,否则需要BindingSource。那么,如何判断控件是否能够做到这一点呢?同样,开发人员是否可以寻找控件必须实现的特定接口.net 什么时候值得使用BindingSource?,.net,winforms,data-binding,bindingsource,.net,Winforms,Data Binding,Bindingsource,我想我已经足够了解BindingSource类的功能了——即在数据源和UI控件之间提供一个间接层。它实现了IBindingList接口,因此也支持排序。我经常使用它,没有太多问题。但我想知道我是否比应该的更经常地使用它。也许举个例子会有所帮助 假设我在表单上只有一个简单的文本框(使用WinForms),我想将该文本框绑定到一个返回字符串的类中的简单属性。在这种情况下使用BindingSource值得吗 现在假设我的表单上有一个网格,我想将它绑定到一个数据表。我现在应该使用BindingSourc
在过去,正是这种混乱导致我总是使用BindingSource。但是我想更准确地理解何时使用,这样我只有在必要的时候才会这样做。嗨,我对这个主题也有些困惑。
当我使用数据表时,它们实现了所有接口。
但是,我总是使用bindingsource只是为了确保……)
我能想到的原因有一些争论
我还想添加,使用BindingSource,您可以绑定到业务对象,该对象可以实现INotifyPropertyChanged事件,因此,如果数据发生更改(无论是由您的代码还是其他人的代码更改),您的UI可以自动反映更新 很老的问题。不知道为什么到现在还没有人回答。好的,我会尝试分享我的经验
BindingSource
不仅仅是将控件绑定到集合的一种方式。在WinForms中工作了十多年后,我最喜欢的BindingSource
的最佳功能包括:
BindingSource
可以充当另一个BindingSource
的数据源DataTable
只是DataRow
s的集合,即DataTables中没有当前记录的概念。DataView
的情况也是如此(另一方面,您不能直接绑定到DataTable
;当您这样做时,它实际上绑定到该DataTable
的DefaultView
属性,该属性是一个DataView
。您也可以创建自己的DataView
)
货币管理在主/细节类用户界面中非常方便。因此,假设您在左窗格(Master)中有一个学生的列表框
,在右窗格中有几个文本框、组合框、复选框等,以及所选学生课程的网格(详细信息)。在数据集中,有两个名为Student
和Courses
的数据表。为了简单起见,我在这里避免使用动名词(学生课程)。课程
表有一个外键StudentID
。以下是如何在此处设置绑定(请注意我上面列出的3个功能是如何在下面的设置中使用的):
bsStudent
和bsCourses
的BindingSource
控件bsStudent
的DataSource
设置为Student