MVVMの実装が理解出来た

ようやくMVVMの事がわかってきたのでMVVMの概念、MVVMパターンでの実装が出来るようになったのだが、まぁこのMVVMの情報で困ったのはコードビハインドにコードを書いている情報がまぁ邪魔だった。

MVVMの概念に即すると、コードビハインドには何も書かないのが正しい概念なんだが、8割くらいのMVVMはこうだ、あぁだと言う情報はデタラメとまでは言わないが役に立たない。

コードビハインドとは.xaml.csと言う拡張子のファイルでVisual StudioだとXAMLの階層に表示されるファイルなんだが、これには一切コードを記載しないのがMVVMの概念でここに書くと折角のMVVMパターンが台無しになる。

理由は簡単で、XAMLとXAML.CSをセットにしないと再利用できないからで、XAML単体のコードをコピペで使えないと言うわけだ。

じゃぁUIの処理とかはVMではやらないのにどうするんだと言う事なんだが、そこにbehaviorを突っ込んで行きlivetを使うと言うことになる。

まぁこのおかげで、コードがかなりややこしくなっていくのだが、このパターンを理解出来ると実にスッキリしてMVVMの概念が初めて理解出来る。

簡単に実装の話をすると、メッセージボックスとかはVM側でも表示することは出来るのだが、ここはあえてLivetのMessengerをVに仕掛けてこれを使って表示する。

最初に一番苦労するのが各コントロールに対してフォーカスをどうするかと言うことで、俺の場合DataGridを使うのだが、ボタンで操作した記号に対応したグリッドと言うか行を選択すると言う単純なことなんだが、これがMVVMを理解してなおかつbehaviorを理解しないと実現出来ない。

コードビハインドにコードを書けば済む話なんだが、これでは先に記載の通り再利用出来ない、するとするとxaml.csもセットにしないと再利用できないのでこれでは不便極まりなくコードビハインドを使うならMVVMパターンにする必要は無いと言うかMVVMモドキでしかない。

情報の中に、コードビハインドにコードは書いてはいけないと言う問いに、Viewの範疇ならOKとかいう解説もあるが、これもNG。

要するにXAML単体で動作し無ければMVVMでは無くMVVM風WindowsFormの実装と何ら変わりなく、ある意味より複雑かさせているに過ぎない。

これは、behaviorの理解がない連中の解説で、そんな情報は切って捨てるしかないが、8割はその手の情報なのでまぁネットの情報特に日本語の情報が如何に役に立たないか思い知った。

よく平気でこんなクソ情報をさもMVVMを解説したつもりで公開出来るなぁと独学者には邪魔でしか無いのだが、どこかでまちがった情報を正しいと信じ切った信者がいるんだろう。

前にもAndrodアプリを開発する際、色々情報を探したのだが、ダイアログの表示で嵌められた事があって、画面を回転した際にダイアログが消えてしまうと言う部分の処理で消えるダイアログは正しい実装じゃないのだが本にはそのダイアログの実装で解説してあって、これも自分のアプリを修正する際にかなり面倒で最初から合理的なソースを組むのはなかなか骨が折れる。

今回はMVVMで情報を集めてまぁデタラメな情報ばかりなので、よーく精査して知識に入れておかないと後で痛い目に遭うのは自分なのだ。

で、途中で脱線したが、xamlで各コントロールにフォーカスを当てる事を自由に出来ないとグリッドの行も選択状態に出来ないのは、単に行を選択してもフォーカスを当てないと選択状態として見えないので、フォーカスがかなり重要になる。

これをbehaviorを使い、各コントロール毎にbehaviorを用意してやるととても幸せになれる。

まぁ一緒に纏めても良いのだがメンテナンス性を考慮して各コントロール毎にファイルを用意した方が後々楽にメンテナンス出来るので、クラスにクラスを内包しない書き方が良さそうだ。

まぁここで言いたいのはMVVMの解説にはかなり気を付けた方が良い。

xaml.csにコードを書いている解説は全くMVVMパターンでの再利用が出来ないデタラメとまでは言わないがWindowsFormとなんら変わらないのでご注意を

大事なのはbehaviorとlivet

この2つをキーに加えて検索して特に日本語以外のサイトの情報を見ると幸せになれる。

コメント