我最近两年开发了一些基于Winforms的数据应用程序,并且都正常工作。此应用程序构建于图层(DataAccess,业务逻辑和UI)上。ObservableCollection(Of T)vs BindingList(Of T)?
Public MustInherit Class BaseEntity Inherits SerializableObject Implements IEntity Implements IComparer, _ IEditableObject, _ INotifyPropertyChanging, INotifyPropertyChanged, _ IApplicationSecurity End Class
在同一核心库:对于的businness逻辑,我的所有对象由称为BaseEntity用下面的定义(有一些自定义对象和接口,与框架元件的组合)的基类继承,我有一个通用的基本集合BaseEntityCollection。这些集合允许我为每个对象定义他的相关强类型集合,这在数据应用程序中非常有用。下面是它的基本定义:
Public MustInherit Class BaseEntityCollection(Of T As BaseEntity)
Inherits BindingList(Of T)
Implements IEntityCollection
Implements INotifyPropertyChanged, INotifyPropertyChanging, ICopyable(Of T)
Implements IDisposable
Implements ISerializable
End Class
正如你所看到的,我使用所有的需要进行正确的数据绑定的WinForms东西:
- INotifyPropertyChanged的,INotifyPropertyChanging,IEditableObject的对象。
- 基于BindingList(Of T)的集合,用于我的集合。
我也对新技术感兴趣,所以我最近看了一些关于WPF的网络广播。在这些网络广播中,它们用作收集和数据绑定支持ObservableCollection(Of T)的基类。
我正在考虑将我的一些应用程序从Winforms迁移到WPF的UI层。我的问题是,对于我的业务逻辑,最好是保留基于BindingList(Of T)的集合,还是应该更改我的基集合类,使其从ObservableCollection(Of T)继承。我想为我的所有项目保留一个独特的基本集合,这些集合在Winforms应用程序,WPF应用程序或ASP.NET中都可以使用。 我也在我的项目中使用Linq作为对象,所以我没有通过仅保留基于框架2.0的项目进行限制。
感谢,
CLABER
`ObservableCollection`是线程安全的,我不知道BindingList。 – Shimmy 2010-12-27 08:58:58
这是不正确的。微软的文档明确指出ObservableCollection不是线程安全的。 http://msdn.microsoft.com/en-us/library/ms668604.aspx – kevindaub 2011-02-11 19:16:58