请问有人能够描述一下对于我的项目,这两者之间的区别吗?
我目前拥有一个 List<MyClass>
,并将 BindingSource 设为该列表,再将 DataGridView 设为 BindingSource。
我已经实现了 IEditableObject
,所以当调用 CancelEdit 时,我会使用 Memberwise.Clone()
将对象还原回去。
将我的 List 更改为 BindingList 会解决上述问题吗,使用 BindingList 有哪些优势?
请问有人能够描述一下对于我的项目,这两者之间的区别吗?
我目前拥有一个 List<MyClass>
,并将 BindingSource 设为该列表,再将 DataGridView 设为 BindingSource。
我已经实现了 IEditableObject
,所以当调用 CancelEdit 时,我会使用 Memberwise.Clone()
将对象还原回去。
将我的 List 更改为 BindingList 会解决上述问题吗,使用 BindingList 有哪些优势?
List<>
是一个自动调整大小的数组,包含给定类型的项目和一些帮助函数(如:排序)。它只是数据,并且您可能会使用它来在模型中运行对象集上的操作。
BindingList<>
是一个包装器,包装了类型列表或集合,并实现IBindingList
接口之一。这是支持双向数据绑定的标准接口之一。它通过实现ListChanged
事件来工作,在添加、删除或设置项目时引发该事件。绑定控件会监听此事件以了解何时刷新其显示。
当将BindingSource的DataSource设置为List<>
时,它会在内部创建BindingList<>
来包装您的列表。如果要在BindingSource之外访问列表,则可以预先使用BindingList<>
进行包装,但除此之外它们是相同的。您还可以从BindingList<>
继承以实现更改项时的特殊行为。
IEditableObject
由BindingSource处理。当您更改任何绑定控件中的数据时,它将调用任何实现对象上的BeginEdit。然后,您可以在BindingSource上调用EndEdit/CancelEdit,它将传递给您的对象。移动到另一行也会调用EndEdit。
BindingList通过使用事件实现双向数据绑定,而List在其集合更改时不会触发事件。
我认为这并不能解决你的特定问题。