我在项目上使用mvvm light。对于 View 之间的通信,我使用的是GalaSoft.MvvmLight.Messaging.Messenger,但无法正常工作。
下面的代码:
注册一个Messenger
GalaMessenger.Default.Register<ServerNewMessenger>(ServiceLocator.Current.GetInstance<ServerNewViewModel>(), (msg) =>
{
Debug.Write("Click");
});
发送信使给接收者
Messenger.Default.Send<ServerNewMessenger>(newItem, ServiceLocator.Current.GetInstance<ServerNewViewModel>());
我从没收到消息。但是当我通过send方法删除收件人时:
Messenger.Default.Send<ServerNewMessenger>(newItem);
然后工作正常。为什么?
最佳答案
您对Register
和Send
的重载感到困惑。在第二个示例中,您正在使用Send
的重载:
void Send<TMessage>(TMessage message, object token);
由于您要发送带有特定 token 的消息,因此只有那些使用相同 token 调用
Register
的消息才会收到该消息。在第一个示例中,您正在使用Register
的重载:void Register<TMessage>(object recipient, Action<TMessage> action);
您没有指定 token ,因此您的对象将不会收到 token 。
如果确实要将此消息仅发送到
ServerNewViewModel
,请使用唯一的 token ,例如GUID
或组成的某些字符串:string token = "YourServerViewModelToken";
var serverNewViewModel = ServiceLocator.Current.GetInstance<ServerNewViewModel>();
GalaMessenger.Default.Register<ServerNewMessenger>(serverNewViewModel, token, (msg) =>
{
Debug.Write("Click");
});
然后,当您发送它时,请使用相同的 token :
string token = "YourServerViewModelToken";
Messenger.Default.Send<ServerNewMessenger>(newItem, token);
关于c# - MVVM没有收到消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34088467/