MainPageクラス
起動時に表示されるMainPageクラスは、CalculatorプロジェクトのViewsフォルダーにあります。フォルダー名から分かるように、このフォルダーに収められたクラスはMVVM(Model-View-View Model)パターンのViewにあたります。MVVMパターンでは、ViewにView Modelを結びつけます(次の図)。電卓アプリではどのような手順で結び付けているのでしょう? それを解き明かすのはちょっと長い道のりになりますが、お付き合いください。
MainPageクラスの実装を見てみると、まずコンストラクター(次の画像)の冒頭で、ApplicationViewModelクラスのインスタンスを作ってメンバー変数m_modelに格納しています(下の画像の行番号67、メンバー初期化子リスト)。ApplicationViewModelクラスはCalcViewModelプロジェクトにあり、MVVMパターンのView Modelに相当します。このView Model(ApplicationViewModelオブジェクト)をViewに結び付ける話は、ApplicationViewModelクラスの説明をした後になります。
さらにMainPageクラスのコンストラクターでは、ApplicationViewModelオブジェクトのPropertyChangedイベントにMainPageクラスのOnAppPropertyChangedメソッドを結び付けています(上の画像の行番号73)。これで、View Modelのプロパティに変化があったときに、OnAppPropertyChangedメソッドが呼び出されるようになります。
さて、AppクラスでNavigateメソッドを使ってMainPageオブジェクトを表示させると、MainPageクラスのOnNavigatedToメソッド(次の画像)が自動的に呼び出されます。
MainPageクラスのOnNavigatedToメソッドでは、設定ファイルなどから最初に表示する電卓のモードを決定してローカル変数initialModeに格納し、そのinitialMode変数を引数としてView ModelのInitializeメソッドを呼び出しています(上の画像の行番号111)。呼び出されたView Modelの方では、指定された電卓モードになるように自分自身(View Model)を更新してから、View ModelのPropertyChangedイベントを発火させます。すると、上述したように、MainPageクラスのOnAppPropertyChangedメソッドが呼び出されることになります(後述)。
