【发布时间】:2013-08-12 02:51:56
【问题描述】:
考虑使用 MVVM 编写的 WPF 应用程序。该应用需要显示员工列表(名字、姓氏、职务),您可以选择多个进行删除。
本例中的模型是“Employee”,它将实现 INotifyPropertyChanged。
视图将是“EmployeeListView”,它将实现 XAML 以显示员工集合。
ViewModel 将是“EmployeeListViewModel”,它将公开一个 ObservableCollection,可以绑定到 EmployeeListView。
我的问题是:“IsSelected”属性应该放在哪里?
- 在模型中?(我不喜欢这个想法,因为模型现在暴露了一个仅由视图需要且与实际域对象无关的属性,而且,这个属性将是没用,如果我以不同的方式实现视图并且不允许一次删除多个员工)。
- 在“EmployeeListViewModel”作为单独的 Dictionary 集合中,它会跟踪员工是否被选中? (或者甚至只是一个包含所有选定员工的 HashSet)。我不太喜欢这样,因为视图中的绑定不再是直截了当的。
- 实现一个单独的 EmployeeViewModel,它包装 Employee 对象并公开 IsSelected 属性。然后 EmployeeListViewModel 会将其集合公开为 ObservableCollection。我最喜欢这个解决方案,但我一直认为每个视图有一个 ViewModel,在这种情况下,我的视图有 2 个视图模型。 这是与 MVVM 模式的偏差,还是这是实现 MVVM 的典型方式?(参考?)
【问题讨论】:
标签: wpf design-patterns mvvm model