通过MVVM Light传递消息而苦苦挣扎

时间:2013-02-25 20:25:10

标签: windows-8 mvvm-light

我有两个视图及其对应的ViewModel,我想使用MVVM Light将文本从一个视图发送到另一个视图,如下所示

在第一个viewmodel中我调用了以下方法

public void NavigatePage()
    {
        string temp = "temp value";

        Messenger.Default.Send("temp");

        Frame frame = Window.Current.Content as Frame;

        if (frame != null) frame.Navigate(typeof(MyPage), temp);
    }

在第2页视图模型中我有以下代码

public MyViewModel()
    {
        Messenger.Default.Register<string>(this, MessageReceived);
    }
    private string test;

    public string Test
    {
        get { return test; }
        set { test = value; RaisePropertyChanged("Test");}
    }

    private void MessageReceived(string message)
    {
        Test = message;
    }

当我调试我的代码时,这个viewmodel的ctor被调用但是MessageReceived没有被调用因此属性Test永远不会被设置,我错过了什么,请帮助

1 个答案:

答案 0 :(得分:0)

发送邮件之前是否真正创建了SecondViewModel?您可以在ViewModelLocator类中指定它。

在定位器中,您必须注册视图模型并在应用程序启动时创建它。 像这样:

SimpleIoc.Default.Register<SecondViewModel>(true);

使用true参数,应用程序启动时将创建SecondViewModel! :)