【问题标题】:WPF MVVM communicate between viewsWPF MVVM 在视图之间进行通信
【发布时间】:2017-07-10 12:43:52
【问题描述】:

假设我在视图 A 中有一个按钮,它应该触发视图 B 的功能。这最好如何完成?我可以使用 Mediator,但我更愿意避免使用它,并且主要将它用于在绝对没有其他方法的视图模型之间进行通信。

这是我的一个想法:

所以基本上我们有一个拦截器类来处理多个视图之间的通信。该视图不知道其他视图。拦截器充当它们之间的信使。

就 MVVM 的思考而言,这可以吗?

【问题讨论】:

  • 你的拦截器和中介或信使有什么区别?
  • @mm8 我的中介包含静态类和属性,而这个没有。拦截器只负责某个特性,而中介器是不同特性的类之间通信的全局对象。
  • 静态类和属性?这些做什么?
  • 你在描述中介者模式。
  • 如果您的 ViewModel 彼此相关,例如父/子,那么一个 ViewModel 引用另一个 ViewModel 是完全可以接受的。然后他们可以直接调用功能。如果它们断开连接,您将需要使用某种消息传递系统,正如其他人所描述的那样。

标签: c# wpf mvvm


【解决方案1】:

大多数 MVVM 框架为此目的包含某种中介。

MvvmLight 中称为Messenger,在Prism 中称为EventAggregator。例如。

调解器可用于以松散耦合的方式在任何两个组件(无论是视图还是视图模型)之间进行通信。

所以你基本上在这里描述了中介者模式。不要重新发明轮子:)

【讨论】:

  • 我认为调解器只是一个静态类,等待其他类在字典中存储和调用一些委托。它的“静态”部分让我不喜欢它。
  • 所以基本上我的拦截器也是一个调解器然后不是静态的。
  • 是的,你的“拦截器”基本上是一个调解器。
  • 它不一定是静态类,有很多不同的实现方式。
  • @BradleyUffner 我假设静态那么只有当我想正确地与断开连接的系统通信时才有意义。我现在确实学到了很多东西。
猜你喜欢
  • 2011-10-12
  • 1970-01-01
  • 2014-07-10
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2016-08-24
相关资源
最近更新 更多