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