我如何得到我的消息,我发送使用MVVM轻IMessenger 2个虚拟机之间
本文关键字:MVVM IMessenger 之间 虚拟机 2个 何得 我的 消息 | 更新日期: 2023-09-27 17:55:06
我有2个ViewModels,都使用MVVM Light的ViewModelBase接口
我有一个视图(这是在另一个视图中创建的选项卡),它处理登录并保存在这个成员
private int loginRights;
然后我希望在另一个视图中发送接收该var,以便它可以根据userRights级别创建选项卡。(这不是一个严肃的应用程序,而仅仅是一个学习使用MVVM的项目,所以安全性不是问题)所以我有这个来发送它
loginRights = -1;
MessengerInstance.Send(loginRights);
但是我怀疑我应该在接收ViewModel中写什么,也有可能让接收类在发送ViewModels发送新数据时执行一些东西?
我有这个
MessengerInstance.Register<int>(this, success);
private void success(int rights)
{
Console.WriteLine(rights);
}
但这根本不起作用,但很难找到一些像样的指南
不知道为什么这对你不起作用,但是使用int
作为消息类型是一个非常糟糕的主意…如果您需要发送的int
值具有完全不同的含义,与登录权限无关,该怎么办?所有注册int
的viewmodel也会收到它,他们不知道这是什么意思。
您应该为您的消息创建特定的类,以便每种消息都可以清楚地识别。
编辑:我看了一下你的代码,显然你在构造函数中显式地创建了信使实例。如果您在其他ViewModel中执行相同的操作,它们将使用不同的信使实例,因此它们将无法交换消息。您必须在两个ViewModels中使用相同的信使实例。尝试使用
Messenger.Default
而不是显式地创建信使实例,它应该可以正常工作。
我不知道mvmc -light messenger,但我建议你发送消息后注册。
如果您有登录实例和另一个vm实例,并且如果您第一次注册并第二次发送消息,则场景应该工作。
也许你可以多给我一些信息。
编辑:看Thomas Levesque的回答,你必须使用信使的相同实例。