日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。ViewModelパターンを使ってると、ViewModelのアクションの後にViewをアニメーションさせたいということをやろうとすると、ViewModelからViewへ依存をさせないといけないのか・・・?とか、ちょっと悩んでしまいます。ViewModelからイベントを通知して、View側で、そのイベントをハンドリングするっていうのも、何だかイベントハンドラの登録処理を書いたり、イベントハンドラのコード書いたりするのめんどくさいしなぁ・・・と思ったりします。4のビヘイビア覗いてみたらよさげなのがありました。その名も「GoToStateAction」です。こいつは、イベントに応じて任意のViewStateに遷移するという代物です。こいつを使うと、ViewModelでイベントさえ公開してれば、それに応じて任意の状態にViewを遷移させるのがBlendからさくっと行えます。world的なサンプルを作ってみようと思います。SilverlightでもWPFでもどちらでもいいのですが、今回はWPFアプリケーションで作成してみました。Silverlightでも同じ要領でいけるはずです。WpfVMFeedbackという名前でBlendからWPFアプリケーションを作成します。BlendはMVVMパターンを支援するような感じで、ViewModelが指定されたUserControlというものがあったりします。これを使用してHelloWorldViewという名前でUserControlを作成します。新規作成をすると、以下のようなViewModelと対応するViewが作成されます。HelloWorldViewModelDataSource}}"/></UserControl>LayoutRootのDataContextにリソースに登録されたViewModelをバインドしているといった作りです。変わった感じはない素直な作りになっています。StudioでViewModelを作りこんでいきます。worldの文字を設定して、処理完了のイベントを通知するだけのシンプルなViewModelの実装にしました。}}特別難しいことはしてません。worldが表示されるところまで作ってみようと思います。ButtonとTextBlockをさくっとHelloWorldViewに置きます。TextBlockのTextプロパティとViewModelのMessageプロパティをバインドします。これはBlendからGUIを使って簡単にできます。次に、CallMethodActionビヘイビアをButtonに割り当てて、ButtonのClickイベント発生時にViewModelのGreetメソッドを呼び出すように設定します。worldという文字列を出すアプリをMVVMパターンでさっくりと作りました。一応HelloWorldViewをMainWindowに配置して実行した結果を以下に示します。worldが表示されたあとに、何かアニメーションを実行したいと思います。一度っきりしかボタンは押せなくていいのでボタンが画面外にす〜〜っと移動して消えてしまうようにしたいと思います。状態ウィンドウから新しくViewStateを作成して、画面外にボタンがあるようにボタンを移動させます。瞬間移動では面白くないので規定の切り替え動作を1秒に設定して1秒かけて画面の外へいってしまうようにします。ボタンにGoToStateActionビヘイビアを設定してTriggerを新規作成してViewModelのGreetFinishedイベントに設定して先ほど作成したViewStateに遷移するように設定します。worldと表示されると、ボタンが画面外へ逃げて行ってしまいます。とるのに苦労しましたが、ボタンが移動してる途中の画面は以下のようになります。こんな感じで、ViewModelでイベントさえ公開してしまえば、あとはBlendを使ってイベントに応答したフィードバックを簡単にアニメーションさせることが出来ます。