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