かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

PrismとKinkumaFrameworkとNotifyPropertyWeaverを設定したプロジェクトテンプレート

VC# Expressでnuget使ったりと色々苦慮した結果プロジェクトテンプレートが一番楽なのかなと思いました。ということでさくっと作ってみました。

上記のzipをそのまま下記の場所にコピーします。

C:\Users\ユーザ名\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual C#\Windows

プロジェクトテンプレートの特徴

MVVM LightみたいにViewModelLocatorとか作ってみました

出来心です。

NotifyPropertyWeaverを適用してるのでViewModelのプロパティを以下のように実装できます。
public string Name { get; set; }

自動実装プロパティを定義するだけでコンパイル後に、ILをごにょごにょしてプロパティの変更通知のコードが自動で入るようになってます。

フィールドの自動初期化機能

以下のようにAutoInit属性をつけることで自動実装プロパティに、デフォルトのコンストラクタインスタンスを生成した値が自動的に設定されます。

[AutoInit]
public InteractionRequest<Notification> AlertRequest { get; private set; }
コマンドの自動初期化機能

以下のように属性をつけることで、コマンドのプロパティを自動的に初期化します。

[AutoInitCommand]
public DelegateCommand<string> HogeCommand { get; private set; }

[CommandMethod]
private void HogeExecute(string p) { }

[CommandMethod]
private bool CanHogeExecute(string p) { return true; }

コマンドのプロパティと対応するメソッドは以下のような命名規約に従う必要があります。

  • コマンドプロパティ
    • コマンド名Command
  • コマンド実行メソッド(必須)
    • コマンド名Execute
      • 戻り値はvoid
      • パラメータはコマンドが受け取る型の引数を指定する。
  • コマンド実行可否判定メソッド(無くてもOK)
    • Canコマンド名Execute
      • 戻り値はbool
      • パラメータはコマンドが受け取る型の引数を指定する。

所感

とりあえず、これ以上の記述の簡略化は思いつきませんでした。性能はべたっと書くより悪いですが、こんなノリで記述したいっていう思いを実装してみました。Express Edition使ってる人に試してもらいたいです!