List<T> vs BindingList<T> 优点/缺点
Posted
技术标签:
【中文标题】List<T> vs BindingList<T> 优点/缺点【英文标题】:List<T> vs BindingList<T> Advantages/DisAdvantages 【发布时间】:2011-01-15 16:22:33 【问题描述】:谁能描述一下这两者对我的项目有何不同?
目前我有一个List<MyClass>
并将 BindingSource 设置为那个并将 DataGridView 设置为 BindingSource。
我已经实现了IEditableObject
,所以当调用 CancelEdit 时,我将我的对象恢复为使用 Memberwise.Clone()
时的状态
将我的 List 更改为 BindingList 会解决任何问题吗?使用 BindingList 有什么优势?
【问题讨论】:
【参考方案1】:List<>
只是一个自动调整大小的数组,包含给定类型的项目,并带有几个辅助函数(例如:排序)。它只是数据,您可能会使用它来对模型中的一组对象运行操作。
BindingList<>
是类型化列表或集合的包装器,它实现了IBindingList
接口。这是支持双向数据绑定的标准接口之一。它通过实现ListChanged
事件来工作,该事件在您添加、删除或设置项目时引发。绑定控件侦听此事件以了解何时刷新其显示。
当您将 BindingSource 的 DataSource 设置为 List<>
时,它会在内部创建一个 BindingList<>
来包装您的列表。如果您想在 BindingSource 之外访问它,您可能希望自己使用 BindingList<>
预先包装您的列表,否则它是一样的。您还可以从BindingList<>
继承来实现更改项目时的特殊行为。
IEditableObject
由 BindingSource 处理。当您更改任何绑定控件中的数据时,它将在任何实现对象上调用 BeginEdit。然后,您可以在 BindingSource 上调用 EndEdit/CancelEdit,它会将其传递给您的对象。移动到不同的行也会调用 EndEdit。
【讨论】:
目前使用我的 ListBindingList 允许使用事件进行双向数据绑定,List 在其集合更改时不会触发事件。
我认为它不会解决您的特定问题。
【讨论】:
以上是关于List<T> vs BindingList<T> 优点/缺点的主要内容,如果未能解决你的问题,请参考以下文章
List<T>,ArrayList,IEnumerable的区别
Java List单例表: Collections::singletonList VS List::of
IEnumerable<T> VS IList<T> VS IQueryable<T>