MVVMパターンで、ViewModelにCommandをプロパティでViewに公開して、ViewでCommandをバインドするというのがスマートな感じなんですが、Commandを定義しようとすると、ViewModelのコードがごちゃごちゃしてくるような気がします。
たとえば
private DelegateCommand hogeCommand; public DelegateCommand HogeCommand { get { return hogeCommand = hogeCommand ?? new DelegateCommand(Hoge, CanHoge); } } public void Hoge() { // do something } public bool CanHoge() { // do something }
みたいなコードの塊が、Commandの数だけずらっと並びます。最近の超個人的な感覚だとViewModelは
public void Hoge() { // do something }
だけ定義して、Viewのコードビハインドのイベントハンドラあたりで
private void button1_Click(object sender, EventArgs e) { this.Model.Hoge(); }
と書くほうが、インテリセンスも効いて開発しやすいんじゃないんだろうかと思うようになってきました。
MVVMで組んでると、コードビハインドに処理を書いたら負けみたいな考えに陥ってしまうこともありますが、割り切ってViewとViewModelを繋ぐためのコードを書いてしまってもいいんじゃないんだろうか?
そう、モヤモヤしてたりします。
実際、どう作るのが楽で現実的なんだろうか。まだまだ、考えないといけないなぁと思う今日この頃でした。