【发布时间】:2013-03-08 17:32:02
【问题描述】:
花了一整天的时间尝试不同的建议后,我回到了第 1 步。我正在尝试将我的视图(XAML 窗口)绑定到我的一个 ViewModel 属性,例如 SalesOrders。 ViewModel 反过来与 Model(数据库顶部的 EF 模型)对话。我面临的问题是我应该用来公开我的 SalesOrders 属性的集合类型。
我尝试了以下类型,但没有一个能满足我的所有需求。
List<T>ObservableCollection<T>BindingList<T>-
CollectionViewSource在上面
这就是我需要我的收藏来做的事情:
- 视图具有上一个/下一个按钮,因此该集合应提供某种货币管理器。
- 视图中有一个保存按钮,我需要根据 SalesOrder 集合是否有任何更改来立即启用/禁用该按钮。由于
SalesOrder已经是一个EF 类型,它的所有字段都实现了INotifyPropertyChanged。
CollectionViewSource 为我提供导航方法(上一个/下一个),但不监听 PropertyChanged 事件,因此修改视图中的数据不会打开保存按钮。 BindingList 可以监听 PropertyChanged 事件,但不提供导航方法。 ObservableCollection 缺少这两种功能。
TIA。
【问题讨论】:
-
听起来你应该自己动手。
-
当您添加到您的
CollectionViewSource时,您不能只连接到模型的PropertyChanged事件并在删除时取消连接吗?然后,在 PropertyChanged 的处理程序中,重新查询保存按钮的命令(我假设它绑定到ICommand) -
为什么您的收藏
need这样做?这不就是 ViewModel 的用途吗?你总是可以滚动你自己的类来公开一个像@Will 建议的集合。 -
Ryan:视图不应该与模型对话,还是应该? Bob:经常需要一个真正的“可观察的集合”。毕竟,这就是我们在框架中拥有所有这些可绑定集合的原因。在 VM 中为每个集合类型属性手动执行此操作就像一次又一次地重新发明同一个轮子。正如 Will 所说,我最终创建了自己的 ObservableCollection。
标签: wpf mvvm binding observablecollection bindinglist