在花了一整天尝试不同的建议后,我回到了正方形1.我正在尝试将我的视图(一个XAML窗口)绑定到我的一个ViewModel属性,比如SalesOrders。 ViewModel又与模型(数据库顶部的EF模型)进行对话。我面临的问题是我应该使用的集合类型来公开我的SalesOrders属性。
我尝试了以下类型,但没有一种能满足我的需要。
List<T>
ObservableCollection<T>
BindingList<T>
CollectionViewSource
在上面的这就是我需要收集的内容:
SalesOrder
已经是EF类型,因此其所有字段都实现INotifyPropertyChanged
。 CollectionViewSource
为我提供了导航方法(上一个/下一个)但不监听PropertyChanged事件,因此修改视图中的数据不会打开“保存”按钮。 BindingList
可以侦听PropertyChanged事件,但不提供导航方法。 ObservableCollection
缺乏这两种功能。
TIA。
答案 0 :(得分:0)
根据MSDN关于CollectionView here:
在WPF应用程序中,所有集合都具有关联的默认值 集合视图。而不是直接与集合合作 绑定引擎始终通过关联访问集合 视图。要获取默认视图,请使用 CollectionViewSource.GetDefaultView方法。基于的内部类 CollectionView是仅实现的集合的默认视图 IEnumerable的。 ListCollectionView是集合的默认视图 实现IList。 BindingListCollectionView是默认视图 对于实现IBindingListView或IBindingList的集合。
这意味着您可以将BindingList用于SalesOrders并将其绑定到View中,然后管理导航,您可以从ViewModel访问其自动创建的CollectionView:
myCollectionView = (BindingListCollectionView)CollectionViewSource.GetDefaultView(this.SalesOrders);
答案 1 :(得分:0)
为什么不使用ObservableCollection<T>
然后订阅CollectionChanged
事件来启用或停用保存按钮,如线程MVVM ObservableCollection Bind TwoWay的答案中所述。