WPF:将域的更改传递给所有视图模型

WPF: pass down changes of domain to all viewmodels

我有一个父视图模型,其中包含作为域对象的人员列表

public class ParentViewModel
{
     public List<Person> Persons{get;set;}

}

我在不同的 window 中有另一个视图模型,它使用 person 集合。

我正在通过引发 Prism 事件来传达变化。如果对单个人或列表进行任何更改,则代码会变得臃肿,不同 window 中的子视图模型必须一堆东西。

在 WPF/.NET 中有没有一种方法可以跟踪作为域对象的人的变化,这样我就可以引发棱镜事件而无需通过更改人(域对象)的特定代码。

如果我正确理解了您的需求,那么我会提供 2 个选项:

  1. 使用 ObservableCollection 而不是列表 这将确保绑定到此列表的人在列表发生变化时得到通知,这是一个很好的例子,您可以在 question.
  2. 的答案中阅读
  3. 但实际上我更喜欢使用 MVVM-Light 的更简洁的方法,所以我认为它在 Prism 中也是可能的,那就是 - 为每个人添加标识符(更好的是当你可以使用其中一个字段作为标识符)。然后发布一条具有相同标识符的消息,以便听众订阅具有特定 Id 的人对象的更改。

换句话说:
A--> 侦听器正在订阅具有特定人员标识符的 PersonChangedMessage。
B--> Person 对象更改 - 它发布一条带有其标识符的消息。
C--> 只有具有相应 id 的监听器才会收到通知。

你可以在这里看到一个很好的例子Subscription Filtering