【问题标题】:What is the proper way to use tokens with the Messenger class?在 Messenger 类中使用令牌的正确方法是什么?
【发布时间】:2012-08-03 22:18:37
【问题描述】:

我正在使用 MVVM Light Toolkit 的 3.0.3.19 版。

来自http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx

现在可以使用令牌通过 Messenger 发送消息。

  • 要发送带有令牌的消息,请使用方法重载 Send(TMessage message, object token)。

  • 要接收带有令牌的消息,请使用方法 Register(object recipient, object token, Action action) 或 Register(object recipient, object token, bool receiveDerivedMessagesToo, Action action)

token 可以是一个简单的值(int、string 等) 或一个实例 一类的。邮件未发送给已注册的收件人 使用不同的令牌,或者根本没有令牌。


根据上面的文档,我在 ViewModel A 中尝试了以下操作:

Messenger.Default.Send(new NotificationMessage("message"), "token");

以及 ViewModel B 中的以下内容:

Messenger.Default.Register<NotificationMessage>(this, "token", (msg) => Console.WriteLine(msg.Notification));

但是,回调永远不会执行。我做错了什么?

【问题讨论】:

    标签: mvvm-light


    【解决方案1】:

    我的 ViewModelLocator 在 ViewModel B 之前初始化了 ViewModel A。换句话说,消息由 ViewModel A 正确发送,但 ViewModel B 还没有真正接收到它。

    我更改了ViewModelLocator中的初始化顺序,问题就解决了。此外,验证了 Messenger 可以使用除字符串之外的其他类型的令牌。

    【讨论】:

      猜你喜欢
      • 2021-05-18
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 2020-09-20
      相关资源
      最近更新 更多