えムナウさんが考えてくれた方法は、確かに素敵だけど、コードを書く量が増えていってしまう。
- http://blogs.wankuma.com/mnow/archive/2010/09/20/193090.aspx
- http://d.hatena.ne.jp/griefworker/20100922/how_to_use_view_function_in_viewmodel
ということで、超妥協案。ViewModelではAction
ViewModelは必要に応じて、このデリゲートの処理を呼んでやる。
XAMLで全部書いてやったぜ!!!っていう爽快感は無いけど、コード量は書いてもいいかなぁと思える量になります。
// View側のコード this.DataContextChanged += (s, e) => { var model = e.NewValue as MainWindowViewModel; // modelのデリゲートにViewのメソッドを突っ込む model.ViewAction = this.Alert; };
// ViewModelではデリゲートをプロパティとして公開する public class MainWindowViewModel { public Action ViewAction { get; set; } }
とまぁ、ここまで書いてViewModelでイベントを公開するのと大差ないなぁと思った。悩ましい。
もっと簡単なのとエレガントなのを両立できる方法は無いかなぁ。