ApplicationViewModelクラス
MainPageクラスのコンストラクターでインスタンス化されるApplicationViewModelクラスの実装は、CalcViewModelプロジェクトにあります。名前が示すように、これがMVVMパターンのView Modelにあたります。いわば、抽象化したUIです。
電卓アプリのView Modelは一つではありません。画面が複数のパーツに分けて作られていて、View Modelも画面のパーツごとに用意されています。次の図にその概要を示します(実際には、もっと細かいパーツに分かれています)。
![ViewとView Modelの関係(概要)](https://codezine.jp/static/images/article/11538/fig15s.png)
さて、前述したように、MainPageクラスが表示されるときにApplicationViewModelクラスのInitializeメソッドを呼び出します。Initializeメソッドは、引数に指定された表示モードを自分自身のModeプロパティにセットします(次の画像、行番号81)。
![ApplicationViewModelクラスのInitializeメソッド](https://codezine.jp/static/images/article/11538/fig16.png)
Modeプロパティのセッターでは、OnModeChangedメソッドを呼び出しています(次の画像、行番号58)。
![ApplicationViewModelクラスのModeプロパティ](https://codezine.jp/static/images/article/11538/fig17.png)
OnModeChangedメソッドはちょっとごちゃごちゃしていますが、ここで必要に応じて表示モードごとのView Modelを生成しています(次の画像)。例えば、指定されたモードが標準電卓ならば(行番号125、最初の赤色下線部)、StandardCalculatorViewModelクラスのインスタンスを作ります(行番号130、2番目の赤色下線部)。
![ApplicationViewModelクラスのOnModeChangedメソッド](https://codezine.jp/static/images/article/11538/fig18s.png)
OnModeChangedメソッドを抜けると、続いてRaisePropertyChangedメソッドを呼び出します(上記Modeプロパティのセッターを参照、行番号59)。するとイベントが発火し、前述したように、MainPageクラスのOnAppPropertyChangedメソッドが呼び出されることになります。