2011-02-02 20 views
2

現在、viewmodelのコンストラクタからのメッセージを自分のviewmodelから送信しようとすると、メッセージがディスパッチされないことがわかります。私がやっていることは、次のようになります。MVVM Light Toolkit NotificationMessageを送信できませんViewModelコンストラクタ

public class MainViewModel 
{ 
    public MainViewModel() 
    { 
     PerformActionCommand = new RelayCommand(OnPerformAction); 
     RefreshTicketsCommand = new RelayCommand(OnRefreshTickets); 

     Messenger.Default.Send(new NotificationMessage("DisplayCredentials")); 
    } 
} 

受信クラスが正しく通知を受信するように設定し、次のようになっている。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      Closing += (s, e) => ViewModelLocator.Cleanup(); 

      Messenger.Default.Register<NotificationMessage>(this, NotificationMessageReceived); 
     } 

     private void NotificationMessageReceived(NotificationMessage msg) 
     { 
      switch (msg.Notification) 
      { 
       case "DisplayCredentials": 
        CredentialsView = new CredentialsView(); 
        var credentialsDlg = CredentialsView.ShowDialog(); 
        break; 
      } 
     } 
    } 
} 

それは私が間違ってやったことを正確には何ですかメッセージはコンストラクタからディスパッチされていませんか?

乾杯

+0

Registerメソッドが呼び出される前にメッセージが送信されていますか? –

答えて

0

このアプローチの問題点は、ViewModelにコンストラクタが表示コンストラクタの前に実行されますので、登録が発生する前にメッセージがディスパッチされることをです。 MVVMLightのEvent-to-Command機能を使用して、WindowのLoadedイベントを聴くことが適切です。詳細はHow to fire a Command when a window is loaded in wpfをご覧ください。

関連する問題