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
- パラメータはコマンドが受け取る型の引数を指定する。
- コマンド名Execute
- コマンド実行可否判定メソッド(無くてもOK)
- Canコマンド名Execute
- 戻り値はbool
- パラメータはコマンドが受け取る型の引数を指定する。
- Canコマンド名Execute
所感
とりあえず、これ以上の記述の簡略化は思いつきませんでした。性能はべたっと書くより悪いですが、こんなノリで記述したいっていう思いを実装してみました。Express Edition使ってる人に試してもらいたいです!