【问题标题】:Communication between two ViewModels with same Model and two views具有相同模型和两个视图的两个 ViewModel 之间的通信
【发布时间】:2019-11-24 12:38:25
【问题描述】:

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

两个 ViewModel 应该能够以某种方式相互通信。例如,如果 ViewModel1 更新了模型中的某些内容,ViewModel2 也应该更新他的视图。 ViewModel 不必相互了解,它们应该只在一方发生更改时同步。

我发现了一些关于中介者模式的旧帖子。这仍然是要走的路吗?我认为观察者模式在这里行不通。我能想到的唯一替代方法是在两个 ViewModel 上创建一个接口,让它们相互交谈。

【问题讨论】:

  • 中介者模式在这里是相关的。使用 Prisms EventAggregator 在 ViewModel 之间发布和响应状态变化事件。

标签: c# design-patterns observer-pattern mediator


【解决方案1】:

我认为您正在寻找的是您的视图模型的消息传递系统。如果您将它们松散耦合,您可以使用事件自己实现一个。 prism 库中也有 Event Aggregator 类,它们的作用相同。一些类订阅,一些发布它们的消息。

【讨论】:

  • 使用它而不是中介者模式有什么好处?对于基于事件的系统,两个 ViewModel 必须相互了解?
  • 我对中介模式了解不多。但据我了解,它看起来与一个缺​​点相同。中介它自己必须了解其他对象。这样它才能处理消息。但在 prism 事件聚合器中,你真的不需要做任何事情。只需订阅一个事件并发布消息。@J.Doe
【解决方案2】:

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

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

【讨论】:

  • 我没有使用 .Net Core。每次更新我都会收到一个全新的 ViewModel?这不会影响性能吗?
猜你喜欢
  • 2015-02-11
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多