まぐらぼ

Unity/Android、Microsoft系のWPFをやってます。

インパクト重視の「ViewModelからViewを操作する」図

MVVM入門 その3「ViewModelからViewを操作する」ですが、文章とコードだけで図が無いので理解しにくいと思います。図を書いてみました。

目的は[(あ)ViewModelからViewを操作する方法]と[(い)ViewModelからViewを操作した結果をViewModelで受け取る]です。

f:id:o-maguro:20140516205807j:plain

1. [View] : ボタン押下
Viewのボタン押下でVMにコマンドが発信される(コードビハンドではない)

2. [VM] : CalculateExecute
CalculateCommandプロパティgetでDelegateコマンドを取得して、ボタン押下に対応するCalculateExecute()メソッドが実行される。ここでラムダ式として定義したCBがトリガーアクションから呼ばれて戻ってきます(5)

3. 米国スパークス高校出身の出番[Messanger(30才右打右投)クラス]
ErrorMessage.Raise()が呼ばれる
f:id:o-maguro:20140516202853p:plain

if (this.myRaise != null ){ ... (*1)
this.myRaise(this, スーツケース(手紙、CB));
}

こんな感じのコードでトリガーActionが起床します(ConfirmAction.Invoke()) スーツケース=MessageEventArgsです。

Messenger.Raisedは名前で混乱するので「myRaised」に変更しています。このmyRaisedはEventTrigger.EventNameプロパティで指定しています。プロパティだから次のようにXAML内で記述できます。

<i:EventTrigger SourceObject="{Binding ErrorMessenger}" EventName ="<span style="color: #ff80c0">myRaised</span>" >

4.[View] トリガーアクション、ConfirmAction.Invoke()
MessageBoxを表示してOK/NGをユーザに問い合わせ。(あ)達成!
スーツケースから手紙とCBを取り出して、CB(手紙)で、コールバックするとVMで定義したラムダ式が呼ばれます(い)達成!

このように動作を可視化すると理解が深まって忘れにくくなります。忘れそうなっても米国スパークス高校出身30歳が思い出させてくれます。