4

我正在使用 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)

标记可以是一个简单的值(int、string 等)或一个类的实例。消息不会传递给使用不同令牌或根本没有令牌注册的收件人。


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

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

连同 ViewModel B 中的以下内容:

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

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

4

1 回答 1

3

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

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

于 2012-08-06T14:33:51.860 回答