2013-02-25 99 views
0

我有两个视图及其对应的ViewModels,我想从一个视图文本发送到另一采用MVVM灯如下与传递消息通过MVVM光

在第一视图模型

我打电话以下方法

挣扎
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; 
    } 

当我调试我的代码,这个视图模型的构造函数获取调用,但在MES sageReceived没有被调用,因此属性测试永远不会被设置,我缺少一些东西,请帮助

+0

尝试指定正在发送的消息的类型Messenger.Default.Send (“temp”); – kindasimple 2013-02-26 02:42:17

+0

对不起,但它dosn't帮助 – 2013-02-26 10:02:11

+0

你确定,你有** MyViewModel创建**之前NavigatePage() 执行? mvvm灯光消息的工作方式应在发送之前订阅,以便接收内容(因为执行Send方法时会立即执行消息处理) – Isantipov 2013-03-01 15:18:39

回答

0

SecondViewModel是否在发送消息之前实际创建?您可以在ViewModelLocator课程中指定。

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

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

随着true参数在应用程序启动时SecondViewModel将被创建! :)