ViewModelから処理中ダイアログを表示する

Microsoft.TeamFoundation.MVVMのWindowViewModelを使うと、WindowDisplayServiceでできる。

以前は、ViewModelにViewのDispatcher.Invokeしたり、Viewとの共通クラスをViewModelから使ったりしてたが、それはMVVMと言えない。

「ViewModelからViewを操作する」とか「ViewModelでMessageBoxを出す」とかでググり続けて・・・

MVVMインフラとかBlendのSDKとかいまいちムズいがこれなら簡単っぽい。

最近作ってる「イベントログからPCの稼働時間を取得するアプリ」に組み込んでみた。

mon8-000340

スタイルはMDSNのProgressBar のスタイルとテンプレートから。

カッコいいな。( ´∀`)bグッ!

手順は、

プロジェクトの参照設定で、[アセンブリ]-[拡張]の中から”Microsoft.TeamFoundation.Controls”を追加し、

mon8-000341

呼び出しソースは、

 

 

これだけ。

XAMLにRegisterWindowを書いて、Microsoft.TeamFoundation.MVVMのWindowViewModelを継承したViewModelからWindowDisplayService.ShowDialogするだけ。

処理中ダイアログは、Actionを受け取るようにして、コンストラクタでTaskでActionを実行。終了orキャンセルで画面を閉じる。

画面を閉じるのは、WindowViewModelのRequestClose()を呼べばよい。

WindowViewModelにはRelayCommandも実装されてるので、キャンセルボタンのハンドラもViewModelに書ける。

コードビハインドには何も書かなくてよい。枠なしWindowの移動処理をコードビハインドに書いてるだけ。かなりMVVMっぽくなった。

以下、ソース。

処理中ウィンドウ

 

 

呼び出し元

スタイル

 

 

App.xaml

 

%d人のブロガーが「いいね」をつけました。