1

我确定以前有人问过这个问题,但我无法得到正确的答案。

随之而来的场景:

我有一个网格,每行有两个图表。单击 Graph1 上的某些内容,使用来自 Graph1 的代码后面发送一条消息:

Messenger.Default.Send<MyCustomMessageType>(message);

然后,在 Graph 2 的 ViewModel 上,我在构造函数中注册:

Messenger.Default.Register<MyCustomMessageType>(this, (message) => UpdateDataContext(message));

问题是发送,现在将它发送到该类型的视图模型的所有实例(这确实有意义)。

我该如何阻止这种情况发生?

4

3 回答 3

3

发送令牌以指定接收者

void Register<TMessage>(object recipient, object token, Action<TMessage> action);
void Send<TMessage>(TMessage message, object token);

例子:

MessengerInstance.Register<Foo>(this, "thespecialone", theFoo=> FunctionFoo(theFoo));
MessengerInstance.Send<Foo>(message, "thespecialone");
于 2013-07-04T13:41:45.550 回答
0

谢谢大家的回答。该消息不是我的问题。问题是我不应该使用 ViewModelLocator 。因为每一行都需要自己的 ViewModel,所以我不再使用 ViewModelLocator,而是在控件的 Onload 中实例化 ViewModel,并将其设置为 Datacontext。不过感谢您的建议。

于 2013-07-04T14:27:06.773 回答
0

首先,您可以在构造函数之外为消息注册视图模型,最好是在 ioc 中。其次,不要使用默认(单例),根据特定视图模型组的需要管理 Messanger 实例。PS 这种方法的最大好处之一(除了明显有用的粒度和解耦)是对代理的支持。

于 2013-12-18T09:19:13.363 回答