C# 具有相同模型和两个视图的两个视图模型之间的通信

C# 具有相同模型和两个视图的两个视图模型之间的通信,c#,design-patterns,observer-pattern,mediator,C#,Design Patterns,Observer Pattern,Mediator,我有一个具有两种不同视图的C应用程序。每个视图都有自己的ViewModel。ViewModels访问相同的模型。视图需要来自同一模型的不同格式的数据。ViewModels处理格式化和验证 两个视图模型都应该能够以某种方式相互通信。例如,如果ViewModel1更新了模型中的某些内容,ViewModel2也应更新其视图。ViewModels不必相互了解,只要在其中一方更改某些内容时进行同步即可 我发现了一些关于中介模式的旧帖子。还是这样吗?我认为观察者模式在这里不起作用。我能想到的唯一替代方法是在

我有一个具有两种不同视图的C应用程序。每个视图都有自己的ViewModel。ViewModels访问相同的模型。视图需要来自同一模型的不同格式的数据。ViewModels处理格式化和验证

两个视图模型都应该能够以某种方式相互通信。例如,如果ViewModel1更新了模型中的某些内容,ViewModel2也应更新其视图。ViewModels不必相互了解,只要在其中一方更改某些内容时进行同步即可


我发现了一些关于中介模式的旧帖子。还是这样吗?我认为观察者模式在这里不起作用。我能想到的唯一替代方法是在两个ViewModels上创建一个界面,让它们可以相互对话。

与此最相关的模式是MVC。如果您使用的是.NETCore,您可以在上阅读它


控制器将能够返回具有更新值的视图模型。您也可以只有一个视图模型,供您拥有的两个视图使用。

我认为您需要的是视图模型的消息传递系统。如果您希望它们松散耦合,您可以使用事件自己实现一个。
prism库中也有类似的类。有些类订阅消息,有些发布消息。

中介模式与此相关。使用Prisms EventAggregator发布和响应ViewModels之间的状态更改事件。我没有使用.Net Core。对于每次更新,我都会收到一个完整的新ViewModel?这不会影响性能吗?使用此模式而不是中介模式有什么好处?在基于事件的系统中,两个视图模型都必须相互了解?我对中介模式不太了解。但据我所知,一个回退看起来是一样的。中介本身必须了解其他对象,这样它才能处理消息。但是在prism事件聚合器中,你真的不需要做任何事情。只需订阅一个事件并发布消息。@J.Doe