2011年05月19日

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

   このエントリーをはてなブックマークに追加 Clip to Evernote
前回の続きです。前回までで、Messenger + Behavior の準備はできました。
つまり、フレームワーク側が出来たということです。

では、この簡易フレームワークをつかって、実際に、ViewModelからメッセージを
送り、Viewを操作してみます。
以下のようなプログラム(以前示したものと同じ)を作成します。


MessengerSample02MessengerSample03



今回は、Viewのコードビハインドには、初期状態のまま、何もコードを追加しません。

■ XAMLの実装

サンプルプログラムのXAMLを示します。


<my:MessengerBehavior.Actions> 要素が、添付ビヘイビアの記述部分です。
通常の添付プロパティのように、Window要素の属性として、


と書きたいところですが、設定するオブジェクトがコレクションであるため、
上記のような記述にしています。

こうすれば、MainWindowクラスのコードビハインドには、何も記述することなく、
ViewModellから、Viewの機能である、MessageBoxを表示できるようになります。

■ ViewModekの実装

ViewModelも掲載しておきましょう。これは、以前示したものと変更はありません。


■ まとめ

ViewModelで、Messenger経由でメッセージを送ると、Messengerが、そのメッセージに
関連付けされたActionを呼び出してくれます。
今回の例では、メッセージとActionの関連付けは、IViewActionの具象クラスが行っています。
そして、XAMLで、MessengerBehavior添付プロパティにActionオブジェクトのコレクションを
指定することで、Viewのコードビヘイビアに何も記述することなく、ViewModelから、
Actionを呼び出せるようになります。

ブラックボックスだった、Messenger + Behavior がどんな仕組みで動いているかの
すこしは理解の助けにはなったのでは、と思います。

僕が作った、Messengerクラスは、グローバルオブジェクトを使い、ViewとViewModel両方から、
簡単にアクセスできるようにしましたが、次回は、データバインドの機能を使い、
グローバルオブジェクトではなく、明示的にインスタンス化したオブジェクトを利用するように
変更してみます。

※言葉だけで理解するのは難しいと思うので、是非、一連の記事で示したコードを、実際に
 Visual Studioで動かしてもらうと、理解が深まると思います。

続く...


 

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

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