WPF MVVM - ViewModels是否可以相互通信?

时间:2015-05-28 02:10:02

标签: wpf events mvvm viewmodel

我正在尝试使用MVVM设计开发一个WPF程序,它有两个控件:浏览器和文本框。

我想要两个ViewModel,一个具有浏览器的逻辑,另一个具有文本框的逻辑。我到处都看了,但是RelayCommand似乎只用于将View命令绑定到ViewModels,而在我的代码中,我还需要两个ViewModel相互通信。例如,我所考虑的机制是浏览器加载网页的时间,浏览器ViewModel提取HTML代码,然后对代码进行一些处理/格式化,一旦完成,它将代码分配给浏览器ViewModel中的属性并引发一个事件。完成此操作后,文本框ViewModel将从浏览器ViewModel(或任何其他ViewModel)中侦听事件,并将文本指定为文本框的内容。

无论如何要实现这一点,或者是拥有包含两个子ViewModel的父ViewModel的唯一方法吗?

由于

2 个答案:

答案 0 :(得分:2)

我会使用Prism.PubSubEvents(nuget包)使用松散耦合的pub / syb事件 https://www.nuget.org/packages/Prism.PubSubEvents/

使用C#,XAML和Prism在Windows应用商店应用中的松散耦合组件之间进行通信 https://msdn.microsoft.com/en-us/library/windows/apps/xx130639.aspx

我希望这会有所帮助。

答案 1 :(得分:2)

是的,这是可能的,也很简单。只需使用事件聚合器模式在视图模型之间进行通信。我读过的最好的文章是Magnus Montin.

EventAggregator模式为here