MVVM Light消息传递问题

时间:2015-02-26 09:53:23

标签: mvvm mvvm-light

我遇到了古怪的问题。我注册收到如下消息:

        Messenger.Default.Register<CreatedPatientMessage>(this, x =>
        {
            CurrentViewModel = targetLeftViewModel;
        });

并发送如下信息

Messenger.Default.Send<CreatedPatientMessage>(new CreatedPatientMessage());

不幸的是它永远不会达到那个信息。我确保在发送消息之前注册了它。奇怪的是,如果我删除下面的行

CurrentViewModel = targetLeftViewModel;

并粘贴类似

的内容
var name = "";

并在其上设置断点,它会停在那里,否则就不会。

1 个答案:

答案 0 :(得分:0)

花了一段时间,但我提出了解决方案。我在构造函数中注册了接收消息,如下所示:

 public Patient(BaseViewModel targetLeftViewModel, BaseViewModel targetRightViewModel)
    {
        this.TargetRightViewModel = targetRightViewModel;
        Messenger.Default.Register<CreatedPatientMessage>(this, x =>
        {
            CurrentViewModel = TargetRightViewModel;
        });
    }

以上定义有效,但当您将负责接收消息的机构更改为:

CurrentViewModel = targetRightViewModel

不会。事实证明,发送到构造函数的参数然后从内存中删除,当需要使用它时,它无法检索,我猜这就是它从未达到过的原因。当我将它保存在属性(TargetRightViewModel)中时,为了保存其值,它按预期工作。