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