RelayCommandで使えそうなアレを作ってみた
あすかです。
冬に出す同人本、180ページまで進みました。
技術本の他にも漫画(18禁)を一緒に出す予定もあって、いろいろ忙しいけど頑張ってます。
とりあえず、本の中から使えそうな部分をちょいちょいしてきます。
まずは冒頭のオブジェクト指向の話!・・・はいきなりだとちょっと重いので、
RelayCommandでなんか作ってみた話をします。
RelayCommandのCanExecute、使ったほうがいいとはわかってるけど設定するのがめんどくて結局使ってないんですよね。
なので、モデルのイベントをCanExecuteChangedに繋げる処理を抽象化するメソッド書いてみました。
まず、前提としてこういうRelayCommandがあるとします。
そして今回作ったコードがこちら。
これをどうやって使うかといいますと、ビューモデルでコマンドを作る時、
こうやって使います。
たったのこれだけで、モデル側がHasInitialized
プロパティの値を変えただけで、CanExecuteChanged
イベントが呼び出されるようになります。
ビューモデル内でPropertyChanged
イベントをCanExecute
に繋げる処理を書く必要がなくなって楽です。
ただ、実際はCanExecute
に渡したいのはプロパティではなくメソッドだっていう場面があると思います。
また、PropertyChanged
ではなく他のイベントにもつなげたいという場面も出てきます。
そういう時は、結果的にはGetCommandWithCanExecute
の引数をもう1つ増やす方向になります。
時間稼ぎをしたいのでその話はまた次回にする方向で。
今回、式木や弱い参照を普通に使ってますが、私が普段使っているコードではなくこの本のために書き下ろしたやつです。もちろん使用実績はありません。安定させるために、これからちょいちょい使わないとですね(´・ω・`)
プロパティ1つにつき1つのデリゲートをPropertyChangedにつなげてるので、たくさんのコマンドからCanExecuteChangedを呼び出す時にパフォーマンス面で不利ですね。ここもなんとかならないのかなぁ‥‥。
本の中で難しいのは多分ここだけです。早くもネタ切れです(´・ω・`)