MessengerでViewModelからViewに通知する

Messenger

前回までで、足し算プログラムの基本的な部分はできました。
ですが、例えば計算が終わったあと、ダイアログを表示する場合はどうでしょうか。
今ViewModelからViewへの通知はBindingのINotifyPropertyChangedしか方法がありません。
INotifyPropertyChangedではViewでダイアログを表示することは出来ないので別の方法が必要になります。

それがMessengerです。
Messengerは、ViewModelやModelからViewに通知したいときに一意の文字列とパラメータを渡してViewに通知を行うことができます。

計算終了をMessengerで通知する

通知を行うMessengerはMessenger.Defaultで取得することができます。
今回はMainViewModel.csのCalcCommandで計算が終わったとに、Messengerで通知を送ってみましょう。

CalcCommand = new RelayCommand(() =>
{
    //CalcCommandが呼び出された時、この中が実行されるので
    //Modelを使って処理を行う

    //足し算
    SumModel.LaunchSum();

    //MessengerでViewに通知する
    Messenger.Default.Send<int>(SumModel.Result,"CalcCompleteMessage");
});

Sendメソッドは送りたいメッセージのパラメータ、送りたいメッセージの一意の名前を引数としています。

ではMainPage.xaml.csのコンストラクタ内にMessengerのメッセージを受信する処理を書きましょう

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

        Messenger.Default.Register<int>(this,"CalcCompleteMessage", async result =>
        {
            MessageDialog dialog = new MessageDialog(string.Format("計算が完了しました。結果は{0}です",result),"通知");
            await dialog.ShowAsync();
        });
    }
}

Calcボタンをクリックすると計算結果がダイアログで表示されれば完成です。

10

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください