Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

ViewModelのコマンドでViewを操作する方法

一番シンプルなのは、ここに記載されているこの方法でした。

Command実行時に、CommandParameterとしてWindowのインスタンスをViewModelへ
渡してあげれば良いのだ。目から鱗であった。

ViewのXamlにおいて、View(Windowオブジェクト)のNameにMyWindowを設定した上で、

Command="{Binding Path=UpdCommand}" CommandParameter="{Binding ElementName=MyWindow}"

とするだけで良い。

【WPF】ViewからViewModelへViewのインスタンスを渡す(CommandParameter経由編)

コマンドの引数にViewのインスタンスを渡したいって何するつもりなのって思われるでしょうけど、例えば「ある顧客を選択した場合は、伝票区分という区分値を入れるテキストボックスを表示する」みたいな時が困る。「コンボボックスの値を切り替えた時に、ある部分だけ文字を大きくしたい」とか。

自分に甘えてコードビハインドで書いてしまうと、Viewを使いまわす時に困ってしまう。Viewをいじるロジックだけ外に出せれば、あとはViewModel側でどーとでも吸収できるようになる。

MVVMフレームワークを使おうかなって思ったけど、別に今のところ困っていない。ネットに転がっているシンプルなViewModelとRelayCommandの組み合わせだけで十分にやりたいことができている。

ViewModelのプロパティでViewの値をバインドできる事(双方向性もある)や、コマンドという単位で汎用的なロジックを切り出せてViewをいじることが可能なら、必要最低限のコードビハインドで実装できる。コードビハインドが無いってことは、Viewを使いまわすことがたいへんやりやすいので、画面数が多くなればなるほどメリットが出てくる。

う〜ん、Windowsフォームには戻りたくね〜