のんのんびりびりプログラマー

のんびりプログラム関係を書いています。また日々思った事を思った時に。

【WPF小技集】MVVMLightのMessengerの使い方

Messengerを使えばViewModelからViewに通知を送って
処理をさせることを簡単にできます。

例えばポップアップを出したいや、
新しい画面を開きたいなど

WPFでは画面の処理はあくまでViewで行うような思考ですので、
ViewModelからMessengerでViewに通知を送ります。

ChatViewModel.cs

public void SendCommandRun()
{
    ChatMessage chatMessage = new ChatMessage(true, this.InputMessage);
    this.ChatMessageList.Add(chatMessage);

    Messenger.Default.Send(chatMessage, "MyMessage");

    this.InputMessage = "";
}

ChatView.xaml.cs

public ChatView()
{
    InitializeComponent();

    Messenger.Default.Register<ChatMessage>(this, "MyMessage", Test);
}

private void Test(ChatMessage cm)
{
    //ここに処理を書く
}

ViewModelにはこれを書きます。
第一引数:ViewModel側に投げたいインスタンス
第二引数:Tokenと呼ばれ同じ他のMessengerと区別するもの
     これはintでもstringでも何でもOK

Messenger.Default.Send(chatMessage, "MyMessage");

Model側にはこれを書きます。
ChatMessage:これはどのクラスを投げてきているか明示するもの
第一引数のthis:これはお決まり
第二引数:Tokenで投げたTokenと同じものを書く
第三引数:どのActionを実行するか書く
     ここでは下にPrivateでTestメソッドを記載しているので、
     Testメソッドを実行するということになる

Messenger.Default.Register<ChatMessage>(this, "MyMessage", Test);

これで簡単にMessengerを使って処理が書けます。