List <T> vs BindingList <T>优点/ DisAdvantages

Jon*_*Jon 85 .net c# data-binding datagridview winforms

有人可以描述两者之间的区别对于我的项目.

目前我有一个List<MyClass>并将BindingSource设置为它,并将DataGridView设置为BindingSource.

我已经实现了IEditableObject,当调用CancelEdit时,我将我的对象恢复到它的状态Memberwise.Clone()

将我的List更改为BindingList会解决这个问题,使用BindingList有什么好处?

Ale*_*x J 117

A List<>只是一个自动调整大小的数组,给定类型的项目,带有几个辅助函数(例如:sort).它只是数据,您可能会使用它来对模型中的一组对象运行操作.

A BindingList<>是类型化列表或集合的包装器,它实现了IBindingList接口.这是支持双向数据绑定的标准接口之一.它通过实现ListChanged事件来工作,该事件是在添加,删除或设置项目时引发的.绑定控件侦听此事件以了解何时刷新其显示.

当您将BindingSource的DataSource设置为a时List<>,它会在内部创建一个BindingList<>包装您的列表.BindingList<>如果你想在BindingSource之外访问它,你可能想用自己预先包装你的列表,但是否则它就是一样的.您还可以继承BindingList<>以在更改项目时实现特殊行为.

IEditableObject由BindingSource处理.当您更改任何绑定控件中的数据时,它将在任何实现对象上调用BeginEdit.然后,您可以在BindingSource上调用EndEdit/CancelEdit,它会将它传递给您的对象.移动到另一行也会调用EndEdit.

  • 不,BindingList与该功能无关.无论基础列表的类型如何,BindingSource都会在当前对象上调用CancelEdit.框架中没有任何内容可以自动为普通对象实现对象版本控制.您可以使用DataTables/DataRows,它为此目的保留数据的原始副本. (2认同)

Ger*_*nck 11

BindingList允许使用事件进行双向数据绑定,List不会在其集合发生更改时触发事件.

我不认为它会解决你的特殊问题.