2011年05月12日

MVVM:Messengerを理解するために自作してみた(3)

   このエントリーをはてなブックマークに追加 Clip to Evernote
それでは、前回作成した Messengerクラスを使い、ViewModelからViewにメッセージを送ってみます。

以下のような簡単なプログラムを作成してみます。

MessengerSample02 MessengerSample03


TextBoxに文字列を入れ、ボタンを押すとダイアログが表示されるという単純なものです。

まずは、Windowクラスです。


Messengerクラスには、Default静的プロパティがあります。このプロパティを使い、
Messengerクラスのインスタンスを取得し、Registerメソッドを呼び出しています。
この例では、DialogBoxMessage と ShowMessage を関連付けしています。

これは、「DialogBoxMessageが送られたら、ShowMessageを呼び出してね」とMessengerクラスに依頼 していることになります。

次に、ViewModelクラスの定義です。ここで、RelayCommand を使っていますが、これも自作すると
記事がながくなるので、http://msdn.microsoft.com/ja-jp/magazine/dd419663.aspx
で紹介されているものをそのまま使います、


Helloコマンドで実際に起動されるメソッドが、HelloActionメソッドです。
ここでMessengerクラスをつかい、DialogBoxMessageのメッセージを送っています。
これで、Viewに定義した ShowMessageメソッドを起動できます。
ShowMessageの結果は、Resultプロパティに格納されますので、これを見て、
その後の処理をしています。

ViewModelから見た場合、どんなダイアログを表示するのかには関与しません。
その実装は、DialogBoxMessageに関連付けされたメソッドの実装次第です。
WPFが標準で用意しているMessageBoxでなくてもかまわないわけです。それは、Viewの仕事になります。
これで、ある種の抽象化が行われていることになります。


最後にXAMLです。


今回は、DialogBoxMessageというメッセージしか定義しませんでしたが、
いろんなメッセージクラスを定義することで、ViewModelからViewを操作することが可能になります。

ところで、「ShowMessageメソッドって、たぶん、どれも同じようなコードになるよね」ってことで、
これを共通化して、添付ビヘイビア内に閉じ込めてしまえば、XAMLに、すこし記述を追加するだけで、
コードビハインドには、何も記述する必要がなくなるはずです。

ということで、次回は、「Messenger + Behavior」の話題に移って行きます。


コードは、GW中に書いたのですが、記事はまだ書きかけ状態中なので、次回は来週かな。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52146951