SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

Windows電卓の中はどうなっているのだろう?(前編)
~オープンソースのコードを見てみよう

UWPアプリ開発の最前線 第13回

再びMainPageクラス

 View Modelの初期化が終わると、MainPageクラスのOnAppPropertyChangedメソッドが呼び出されます(次の画像)。

MainPageクラスのOnAppPropertyChangedメソッド
MainPageクラスのOnAppPropertyChangedメソッド(MainPage.xaml.cpp

 このOnAppPropertyChangedメソッドでは、View Modelの表示モード(m_model->Mode)に従って、EnsureCalculatorメソッド(標準電卓用、上の画像の行番号130)/EnsureDateCalculatorメソッド(日付計算用)/EnsureConverterメソッド(単位変換用)のいずれかを呼び出します。「Ensure」とは、「確実にする」とか「確保する」といった意味です。

 例えばView Modelの表示モードが日付計算だった場合、OnAppPropertyChangedメソッドから次の画像のEnsureDateCalculatorメソッドが呼び出されます。

MainPageクラスのEnsureDateCalculatorメソッド
MainPageクラスのEnsureDateCalculatorメソッド(MainPage.xaml.cpp

 この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の用意ができて、その両者を結びつけることができました。これで電卓アプリの画面が表示されます。

次のページ
まとめ

関連リンク

この記事は参考になりましたか?

UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11538 2019/07/26 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー