SHOEISHA iD

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

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

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

UWPアプリ開発の最前線

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

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

MainPageクラス

 起動時に表示されるMainPageクラスは、CalculatorプロジェクトのViewsフォルダーにあります。フォルダー名から分かるように、このフォルダーに収められたクラスはMVVM(Model-View-View Model)パターンのViewにあたります。MVVMパターンでは、ViewにView Modelを結びつけます(次の図)。電卓アプリではどのような手順で結び付けているのでしょう? それを解き明かすのはちょっと長い道のりになりますが、お付き合いください。

>MVVMの相互関係
MVVMの相互関係(Creating Mobile Apps with Xamarin.Forms book - Summary of Chapter 18. MVVMより)

 MainPageクラスの実装を見てみると、まずコンストラクター(次の画像)の冒頭で、ApplicationViewModelクラスのインスタンスを作ってメンバー変数m_modelに格納しています(下の画像の行番号67、メンバー初期化子リスト)。ApplicationViewModelクラスはCalcViewModelプロジェクトにあり、MVVMパターンのView Modelに相当します。このView Model(ApplicationViewModelオブジェクト)をViewに結び付ける話は、ApplicationViewModelクラスの説明をした後になります。

MainPageクラスのコンストラクター
MainPageクラスのコンストラクター(MainPage.xaml.cpp

 さらにMainPageクラスのコンストラクターでは、ApplicationViewModelオブジェクトのPropertyChangedイベントにMainPageクラスのOnAppPropertyChangedメソッドを結び付けています(上の画像の行番号73)。これで、View Modelのプロパティに変化があったときに、OnAppPropertyChangedメソッドが呼び出されるようになります。

 さて、AppクラスでNavigateメソッドを使ってMainPageオブジェクトを表示させると、MainPageクラスのOnNavigatedToメソッド(次の画像)が自動的に呼び出されます。

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

 MainPageクラスのOnNavigatedToメソッドでは、設定ファイルなどから最初に表示する電卓のモードを決定してローカル変数initialModeに格納し、そのinitialMode変数を引数としてView ModelのInitializeメソッドを呼び出しています(上の画像の行番号111)。呼び出されたView Modelの方では、指定された電卓モードになるように自分自身(View Model)を更新してから、View ModelのPropertyChangedイベントを発火させます。すると、上述したように、MainPageクラスのOnAppPropertyChangedメソッドが呼び出されることになります(後述)。

次のページ
ApplicationViewModelクラス

関連リンク

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

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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー