2013-02-25 131 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將被創建! :)