Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在MVVM中的多个视图上同步可修改列表_Wpf_Vb.net_Mvvm_Singleton - Fatal编程技术网

Wpf 在MVVM中的多个视图上同步可修改列表

Wpf 在MVVM中的多个视图上同步可修改列表,wpf,vb.net,mvvm,singleton,Wpf,Vb.net,Mvvm,Singleton,我正在尝试学习VB.NET和WPF的MVVM。现在我遇到了一个无法解决的局面。我的程序中的实际数据非常具体,因此我将在这里使用类似的构造 首先,有几个部门。他们有一个部门经理。它们是常用的模型,并且具有常用的ViewModel。 然后是员工。他们有名字和id。员工也是模特,他们也有ViewModel 计划有一个视图来编辑员工列表 有一个视图可以编辑部门 “部门”视图有一个下拉列表,用于从员工中选择部门经理 现在我的问题是:我在哪里以及如何管理员工,以便在添加新员工时更新所有部门的下拉列表 到

我正在尝试学习VB.NET和WPF的MVVM。现在我遇到了一个无法解决的局面。我的程序中的实际数据非常具体,因此我将在这里使用类似的构造

首先,有几个部门。他们有一个部门经理。它们是常用的模型,并且具有常用的ViewModel。 然后是员工。他们有名字和id。员工也是模特,他们也有ViewModel

  • 计划有一个视图来编辑员工列表
  • 有一个视图可以编辑部门
“部门”视图有一个下拉列表,用于从员工中选择部门经理

现在我的问题是:我在哪里以及如何管理员工,以便在添加新员工时更新所有部门的下拉列表

到目前为止,我使用了singleton作为
EmployeeService
,这确保了两件事:

  • 默认列表中有5名员工,不能修改
  • 添加的条目在id方面没有重复项
  • EmployeeService
    使用
    可观察的集合(员工)
    来组织模型。此外,它还提供了一个
    公共财产Employees作为(员工的)只读可观察集合

    DepartmentViewModel
    有一个
    公共属性EmployeeOptions作为String()
    来填充下拉列表。它将一个
    CollectionChanged
    事件处理程序添加到服务的
    ReadOnlyObservableCollection
    (将其视为
    INotifyCollectionChanged
    )中,该处理程序重新填充
    EmployeeOptions
    并在之后激发
    OnPropertyChanged(“EmployeeOptions”)

    但是我觉得这不是一个很好的方法,是吗

    我想知道我是否应该制作一个
    EmployeeServiceViewModel
    来包装
    EmployeeService
    ,并为所有
    部门视图模型
    实例提供一个类似
    的可观察集合(EmployeeViewModel)
    ?一方面,这意味着要有一个singleton
    EmployeeServiceViewModel
    ,我经常读到“你不应该使用视图模型singleton”。另一方面,编辑员工列表的视图要求
    EmployeeServiceViewModel
    ,对吗


    有人有结构图或模型可编辑列表填充多个视图下拉列表的东西吗?

    订阅CollectionChanged肯定是我过去自己做的,我不知道你为什么对此有所保留。我想我的第一个问题是为什么要使用两个数组?为什么您的employee视图和department视图不能引用同一个ObservableCollection?@Mark目前我在DepartmentViewModel中使用一个字符串数组,在EmployeeService中使用一个ObservableCollection(员工的)。我还没有员工视图的ViewModel。我想知道是否应该放弃EmployeeService中的逻辑,在EmployeeServiceViewModel中实现它,并按照您的建议在我的DepartmentView中使用该viewmodel的列表。听起来比链式更新几十个字符串数组要好。我绝对建议,拥有需要持续同步的同一数据的多个副本是没有意义的。这样做的唯一缺点是,您可能会传递大量指向各种对象的指针,但依赖注入框架(如Ninject或Unity等)将为您解决所有这些问题,并支持各种非常有用的功能(例如,确保在逻辑树中为给定屏幕对象创建的每个对象都指向同一个服务)。当然,您也可以使用它为单元测试注入模拟对象。