かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

PrismベースのMVVMライブラリを作りました

バージョン4からMVVMのサポート機能が追加されたpatterns & practices: Prismですが、Prismのコードネーム?がComposite Application Guidance for WPF and Silverlightだったことからもわかるように、もともとMVVMを視野に入れて作られたライブラリではありません。そのため、Prismを使うというとBootstrapperを継承したクラスを作ったりMEFを使ったりetc...という感じの重厚なしくみのアプリケーションになりがちです。
別に、これがダメというわけではなく柔軟(普通のアプリケーションにとっては過剰すぎるかも?)に拡張可能なアプリケーションを作成するためには、これらの機能を使うと自前で全部作りこむより楽が出来ることは間違いありません。学習コストとのトレードオフはあると思いますが・・・。
前置きはこれくらいにして、今回はPrismの中のごく一部の機能として提供されているMVVMパターンをサポートするためのクラス群をベースに自前でMVVMのためのクラス群を実装しました。とりあえず、簡単に紹介したいと思います。

公開ページ

CodePlexに公開しています。
MVVM Support Library and ItemTemplate (Prism Based)

注意事項

まだ、テストをほとんどしていないので99%以上の確率で潜在的なバグはあると思いますm(_ _)m

提供している代表的な機能

以下のような機能を提供しています。

  • ViewModelの基本クラスの提供
    • PrismのDelegateCommandとCommandManagerのシームレスな連携機能の提供
    • AutoInit属性をつけたプロパティの初期化機能の提供(InteractionRequestの初期化を想定している機能)
  • DataAnnotationsによる検証とIDataErrorInfoによる検証エラー通知機能を提供するValidationViewModelBaseクラスの提供
  • InteractionRequestと連携する様々なアクションの提供
  • 処理がUIスレッド上で動作するTriggerActionの拡張クラスを提供
    • InteractionRequestと連携するActionが簡単に作成できます
  • 関連付けたコントロールのEnableプロパティとCanExecuteを連携させるEnabledInvokeCommandActionクラスの提供
  • T4テンプレートを使用したViewModelクラスの簡易記述が可能なアイテムテンプレートの提供
  • 非依存プロパティのコントロールのプロパティとVMのプロパティの疑似的な双方向Bindingの機能の提供

インストール方法

ダウンロードして出来たItemTemplatesフォルダを以下のフォルダにコピーします。
C:\Users\ユーザ名\Documents\Visual Studio 2010\Templates\ItemTemplates\Visual C#

使い方

WPFアプリケーションのプロジェクトを作成して、PrismとBlend SDKのアセンブリを参照設定に追加します。そして、Okazuki.MVVM.PrismSupport.dllを参照に追加します。
Blendを持ってなくてTriggerActionやBehaviorを設定するのが大変な人は以下の補助ツールを導入してもいいと思います。Visual StudioのデザイナからTriggerActionやBehaviorの設定が出来るようになります。

サンプルプログラム

サンプルプログラムとして以下のようなプログラムを同梱しています。動作にはSQL Server Compact Edition 4.0が必要なので入れてない人はインストールしてください。

サンプルプログラムは、EntityFramework CodeFirstを使った簡単なCRUDを実現するアプリケーションです。起動すると以下のような画面が表示されて、テキストボックスに検索したい名前(部分一致)を入力して検索ボタンを押すとDataGridにデータが表示されます。

項目を選択して編集ボタンを押すと、データの編集ができます。

名前と生年月日は、どちらも必須入力項目になっています。入力にエラーがあると、エラーメッセージが画面の下部に表示されます。

OKボタンを押すと入力した内容でデータが更新されます。

追加ボタンを押すと、編集時と同じ要領でデータの追加ができます。

削除ボタンを押すと確認ダイアログが表示されOKを押すとデータが削除されます。

最後に

今後、このブログで作るMVVMのサンプルプログラムは、このライブラリをベースにして行っていきます。ここで紹介したサンプルプログラムも取り込める物は積極的に取り込んでいこうとおもいます!