我如何得到我的消息,我发送使用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);
}

但这根本不起作用,但很难找到一些像样的指南

我如何得到我的消息,我发送使用MVVM轻IMessenger 2个虚拟机之间

不知道为什么这对你不起作用,但是使用int作为消息类型是一个非常糟糕的主意…如果您需要发送的int值具有完全不同的含义,与登录权限无关,该怎么办?所有注册int的viewmodel也会收到它,他们不知道这是什么意思。

您应该为您的消息创建特定的类,以便每种消息都可以清楚地识别。


编辑:我看了一下你的代码,显然你在构造函数中显式地创建了信使实例。如果您在其他ViewModel中执行相同的操作,它们将使用不同的信使实例,因此它们将无法交换消息。您必须在两个ViewModels中使用相同的信使实例。尝试使用Messenger.Default而不是显式地创建信使实例,它应该可以正常工作。

我不知道mvmc -light messenger,但我建议你发送消息后注册。

如果您有登录实例和另一个vm实例,并且如果您第一次注册并第二次发送消息,则

场景应该工作。

也许你可以多给我一些信息。

编辑:看Thomas Levesque的回答,你必须使用信使的相同实例。