Wpf 在MVVM中的多个视图上同步可修改列表
我正在尝试学习VB.NET和WPF的MVVM。现在我遇到了一个无法解决的局面。我的程序中的实际数据非常具体,因此我将在这里使用类似的构造 首先,有几个部门。他们有一个部门经理。它们是常用的模型,并且具有常用的ViewModel。 然后是员工。他们有名字和id。员工也是模特,他们也有ViewModelWpf 在MVVM中的多个视图上同步可修改列表,wpf,vb.net,mvvm,singleton,Wpf,Vb.net,Mvvm,Singleton,我正在尝试学习VB.NET和WPF的MVVM。现在我遇到了一个无法解决的局面。我的程序中的实际数据非常具体,因此我将在这里使用类似的构造 首先,有几个部门。他们有一个部门经理。它们是常用的模型,并且具有常用的ViewModel。 然后是员工。他们有名字和id。员工也是模特,他们也有ViewModel 计划有一个视图来编辑员工列表 有一个视图可以编辑部门 “部门”视图有一个下拉列表,用于从员工中选择部门经理 现在我的问题是:我在哪里以及如何管理员工,以便在添加新员工时更新所有部门的下拉列表 到
- 计划有一个视图来编辑员工列表
- 有一个视图可以编辑部门
EmployeeService
,这确保了两件事:
EmployeeService
使用可观察的集合(员工)
来组织模型。此外,它还提供了一个公共财产Employees作为(员工的)只读可观察集合
DepartmentViewModel
有一个公共属性EmployeeOptions作为String()
来填充下拉列表。它将一个CollectionChanged
事件处理程序添加到服务的ReadOnlyObservableCollection
(将其视为INotifyCollectionChanged
)中,该处理程序重新填充EmployeeOptions
并在之后激发OnPropertyChanged(“EmployeeOptions”)
但是我觉得这不是一个很好的方法,是吗
我想知道我是否应该制作一个EmployeeServiceViewModel
来包装EmployeeService
,并为所有部门视图模型
实例提供一个类似的可观察集合(EmployeeViewModel)
?一方面,这意味着要有一个singletonEmployeeServiceViewModel
,我经常读到“你不应该使用视图模型singleton”。另一方面,编辑员工列表的视图要求EmployeeServiceViewModel
,对吗
有人有结构图或模型可编辑列表填充多个视图下拉列表的东西吗?订阅CollectionChanged肯定是我过去自己做的,我不知道你为什么对此有所保留。我想我的第一个问题是为什么要使用两个数组?为什么您的employee视图和department视图不能引用同一个ObservableCollection?@Mark目前我在DepartmentViewModel中使用一个字符串数组,在EmployeeService中使用一个ObservableCollection(员工的)。我还没有员工视图的ViewModel。我想知道是否应该放弃EmployeeService中的逻辑,在EmployeeServiceViewModel中实现它,并按照您的建议在我的DepartmentView中使用该viewmodel的列表。听起来比链式更新几十个字符串数组要好。我绝对建议,拥有需要持续同步的同一数据的多个副本是没有意义的。这样做的唯一缺点是,您可能会传递大量指向各种对象的指针,但依赖注入框架(如Ninject或Unity等)将为您解决所有这些问题,并支持各种非常有用的功能(例如,确保在逻辑树中为给定屏幕对象创建的每个对象都指向同一个服务)。当然,您也可以使用它为单元测试注入模拟对象。