有人可以描述我的项目两者之间的区别。
目前,我有一个List<MyClass>
,并将BindingSource设置为那个,并将DataGridView设置为BindingSource。
我已经实现了,IEditableObject
所以当调用CancelEdit时,我将对象恢复为原来的状态Memberwise.Clone()
将我的列表更改为BindingList可以解决任何问题吗?使用BindingList有什么优点?
Answers:
A List<>
只是一个具有给定类型的项目的自动调整大小的数组,带有几个辅助函数(例如:sort)。只是数据,您可能会使用它对模型中的一组对象运行操作。
A BindingList<>
是围绕类型化列表或集合的包装,该包装实现了IBindingList
接口。这是支持双向数据绑定的标准接口之一。它通过实现ListChanged
事件来工作,在添加,删除或设置项目时会引发该事件。绑定控件侦听此事件,以便知道何时刷新其显示。
当您将BindingSource的DataSource设置为时List<>
,它将在内部创建一个BindingList<>
包装列表的列表。BindingList<>
如果您想在BindingSource之外访问列表,则可能需要用自己来包装列表,否则,它是相同的。您还可以从继承BindingList<>
以实现更改项目时的特殊行为。
IEditableObject
由BindingSource处理。当您更改任何绑定控件中的数据时,它将在任何实现对象上调用BeginEdit。然后,您可以在BindingSource上调用EndEdit / CancelEdit,它将把它传递给您的对象。移动到另一行也将调用EndEdit。
BindingList允许使用事件进行双向数据绑定,而List在其集合更改时不会触发事件。
我认为这不会解决您的特定问题。