ViewModel通信模式

时间:2016-08-05 11:32:44

标签: wpf c#-4.0 mvvm

我正在制作一个用关系表进行数据库导航的程序。

例如,您有一个人类和一个汽车类,在添加新人时,您还需要添加他们驾驶的汽车。 因此,您有一个浏览按钮,用于打开您用于人员的同一窗口,并创建该视图模型的另一个实例。请记住,我的viewmodel是通用的,因此它适用于所有类型。

我需要的是一些在这两个视图模型之间进行通信的模式,以便在某种程度上,如果您知道我的意思,它可以返回选定的汽车。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我不能发表评论,所以就这样了。

所以你有2个ViewModel对象实例,你需要知道每个代表什么类型转换存储在ViewModel通用对象中的那个类型。

在ViewModel中尝试存储Type,这样您就可以在ViewModel中Convert.ChangeType(object, Type)将任何对象转换为特定类型。

答案 1 :(得分:0)

您正在寻找的是中介模式。

https://en.wikipedia.org/wiki/Mediator_pattern

在Prism和各种MVVM库中,它有时被称为“EventAggregator”。您可以实现各种版本,但基本思想是注入介体,并且VM订阅或发布到已知事件。该事件可以传递您需要的任何数据。

这可以确保您的虚拟机不会被耦合并允许它们进行通信并且可以扩展,因为您可以继续向事件聚合器添加新事件,并且虚拟机可以根据需要发布/发布。