在WPF MVVM中传递两个视图模型

时间:2013-04-22 14:04:07

标签: c# wpf mvvm

我正在开发一个WPF应用程序,我在将一个视图模型与另一个视图模型进行通信时遇到了一些问题。

我有:

  1. MainViewModel
  2. ChildViewModel1
  3. ChildViewModel2
  4. 每次在MainViewModel中更改属性时,都应通知ChildViewModel1和ChildViewModel2。

    有人可以建议解决方法吗?

    编辑: 我正在考虑一个解决MVVM Light(http://simplemvvmtoolkit.codeplex.com/SourceControl/changeset/view/23821#313594.)的解决方案,即实现消息总线。这是正确的做法吗?

3 个答案:

答案 0 :(得分:11)

在大多数情况下,我不建议使用任何集中的地方来分享"事件" /"通知",如EventAggregator等。这导致后来的问题与不清楚的关系有关ViewModels之间。在非常特定的情况下,即使在设计阶段,即使不知道收听者/出版者之间的关系,这种通知也是有意义的 我建议使用ViewModel之间的关系绘制简单的图表并找到使用标准.NET事件的方法,因此当ViewModel之间有明确的实现时,ViewModel1会引用ViewModel2,因此可以订阅事件或提供自己的回调,所以它会很容易建立这样的事件通知。

答案 1 :(得分:5)

答案 2 :(得分:2)

我会使用由每个视图模型实现的IService。然后在视图模型中,您可以将服务属性传递给实现INotifypropertychanged的视图模型的属性。例如,我有一个名为INavigationService的服务,它由我的视图模型实现,它具有我在视图模型中绑定的CanNavigate,currentView等属性。对这些属性的更改可能导致导航或更改其他视图模型绑定到的属性。