再びMainPageクラス
View Modelの初期化が終わると、MainPageクラスのOnAppPropertyChangedメソッドが呼び出されます(次の画像)。
このOnAppPropertyChangedメソッドでは、View Modelの表示モード(m_model->Mode)に従って、EnsureCalculatorメソッド(標準電卓用、上の画像の行番号130)/EnsureDateCalculatorメソッド(日付計算用)/EnsureConverterメソッド(単位変換用)のいずれかを呼び出します。「Ensure」とは、「確実にする」とか「確保する」といった意味です。
例えばView Modelの表示モードが日付計算だった場合、OnAppPropertyChangedメソッドから次の画像のEnsureDateCalculatorメソッドが呼び出されます。
このEnsureDateCalculatorメソッドでは、DateCalculatorクラスのインスタンスを作っています(上の画像の行番号317)。ようやく登場しました。このDateCalculatorクラスが電卓の中身のViewなのです(CalculatorプロジェクトのViewsフォルダーにあります)。正確には、DateCalculatorクラスは日付計算用のViewです。前掲した「ViewとView Modelの関係(概要)」図をご覧ください。3つの「Ensure~」メソッドごとに異なるViewを生成します。「Viewに合うView Modelを生成する」のではなくて、「View Modelに合うViewを生成する」という作りになっているのが面白いですね。
そしてEnsureDateCalculatorメソッドでは、生成した日付計算用のViewのデータコンテキスト(m_dateCalculator->DataContext)に、日付計算用のView Model(m_model->DateCalcViewModel)をセットしています(上の画像の行番号319、他の2つのモードでも同様)。
ようやく、ViewとViewModelの用意ができて、その両者を結びつけることができました。これで電卓アプリの画面が表示されます。
