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

有人可以描述两者之间的区别是什么我的项目。

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

我已经实现了IEditableObject因此当调用CancelEdit时,我将对象还原为Memberwise.Clone()

将我的列表更改为一个BindingList解决任何这一点,使用BindingList的优点是什么?

一个List<>只是一个给定types的项目自动resize的数组,带有一些辅助函数(如:sort)。 这只是数据,您可能会使用它来对模型中的一组对象运行操作。

BindingList<>是一个包装types列表或集合,它实现了IBindingList接口。 这是支持双向数据绑定的标准接口之一。 它通过实现ListChanged事件来工作,当您添加,删除或设置项目时引发该事件。 绑定控件监听这个事件,以便知道什么时候刷新它们的显示。

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

IEditableObject由BindingSource处理。 当你改变任何绑定控件中的数据时,它会调用任何实现对象上的BeginEdit。 然后你可以在BindingSource上调用EndEdit / CancelEdit,它会把它传递给你的对象。 移动到不同的行也会调用EndEdit。

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

我不认为这会解决你的问题。