[英]WPF: Which collection class to use
在花了一整天的时间尝试不同的建议之后,我回到了第1方块。我试图将我的视图(XAML窗口)绑定到我的ViewModel属性之一(例如SalesOrders)。 然后,ViewModel与模型(数据库顶部的EF模型)对话。 我面临的问题是我应该用来公开我的SalesOrders属性的集合类型。
我尝试了以下类型,但没有一种可以满足我的所有需求。
List<T>
ObservableCollection<T>
BindingList<T>
CollectionViewSource
这是我需要收集的东西:
SalesOrder
已经是EF类型,因此其所有字段都实现INotifyPropertyChanged
。 CollectionViewSource
为我提供了导航方法(上一个/下一个),但是不侦听PropertyChanged事件,因此在视图中修改数据不会打开“保存”按钮。 BindingList
可以侦听PropertyChanged事件,但不提供导航方法。 ObservableCollection
缺少这两种功能。
TIA。
根据MSDN关于CollectionView 在这里 :
在WPF应用程序中,所有集合都有一个关联的默认集合视图。 绑定引擎始终不通过关联的视图访问集合,而不是直接使用集合。 若要获取默认视图,请使用CollectionViewSource.GetDefaultView方法。 基于CollectionView的内部类是仅实现IEnumerable的集合的默认视图。 ListCollectionView是实现IList的集合的默认视图。 BindingListCollectionView是实现IBindingListView或IBindingList的集合的默认视图。
这意味着您可以将BindingList用于SalesOrders并将其绑定到View中,然后要管理导航,可以使用以下方法从ViewModel中访问其自动创建的CollectionView:
myCollectionView = (BindingListCollectionView)CollectionViewSource.GetDefaultView(this.SalesOrders);
您为什么不使用ObservableCollection<T>
然后订阅CollectionChanged
事件以启用或禁用您的保存按钮,如线程MVVM ObservableCollection Bind TwoWay的答案中所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.