2015-04-03 257 views
0

我有一些mvvm燈的問題。在使用_firstViewModel MVVMLightmvvm light wpf unregister

例如我註冊上消息

FirstViewModel() 
{ 
     Messenger.Default.Register<GrapCommunication>(this, (emp) => 
     { 
      if (selectedNumber != null && emp.assetSelector.ContainsKey(selectedNumber)) 
       S.Points.Add(new DataPoint(DateTime.Now.ToOADate(), emp.assetSelector[selectedNumber].Last_Value)); 
     }); 
} 

當我在_secondViewModel切換。 _firstViewModel仍然獲取數據。我試圖做類似

private void ExecuteSecondViewCommand() 
{ 
    CurrentViewModel = MainViewModel._secondViewModel; 
    Messenger.Default.Unregister(_firstViewModel); 
} 

沒有幫助。

+0

是您參考'_firstViewModel'仍然有效,在那裏你調用'Unregister'?換句話說,它不是指向不同的視圖模型或是「空」? – 2015-04-03 12:52:47

+0

是的,它是所有rig_firstViewModel!= null – A191919 2015-04-03 12:57:49

+0

它只是您要註銷的類型消息嗎? MVVM Light在ViewModelBase中有一個Cleanup方法,它應該從* all *消息類型中註銷一個ViewModel。可能值得一踢。 – goobering 2015-04-03 14:57:12

回答

0

嘗試指示對象類型以及Messenger.Default.Unregister<GrapCommunication>(_firstViewModel)。並確保_firstViewModel是註冊該呼叫的FirstViewModel的相同實例。

您也可以使用令牌 Messenger的參數,這將允許您在同一個ViewModel上註冊同一對象的多個實例,併爲您提供一些關於註冊的額外信息。

Messenger.Default.Register<GrapCommunication>(this, "RegistrationDescription",(emp) => {...}

而且Messenger.Default.Unregister(_firstViewModel, "RegistrationDescription");