このページに関連付けられた状態を保存します。シリアル化の要件に準拠する必要があります。メソッドに応答できるようにするためにのみ使用します。ハンドラーに配置する必要があります。パラメーターを使用できます。#endregion}少しずつ解説していきます。DefaultViewModelプロパティDefaultViewModelというObservableDictionary型のプロパティが定義されています。ObservableDictionaryクラスはCommon名前空間で定義されている、変更通知機能を持ったDictionaryです。8.1では、ページに直接定義されるようになりました。これはただ単に、XAML側でDataContextにBindingされているプロパティになります。該当箇所を以下に示します。mc:Ignorable="d">DefaultViewModelのプロパティのコメントにあるとおり、ここの型をObservableDictionary型から変えることで、任意の型をページのViewModelとして割り当てることができます。モデルに変更できます。}}例えばMyViewModelというViewModelを定義して、それを使いたい場合は以下のようにコードを書き換えます。}}基本クラスではなく、ページに定義されるようになったことで、このように簡単に型を変えることができるようになりました。この点はとってもいいと思います。8のLayoutAwarePageの場合は、ページに独自プロパティを定義して、それをDataContextに紐づけることで同様のことができますが、LayoutAwarePageに定義されたDefaultViewModelプロパティは残りっぱなしなので、なんだか気持ち悪い感じになってました。アプリが持つべき一般的な動きをページクラスに付与するヘルパークラスです。NavigationHelper.csを開くと、クラスのドキュメントコメントに使用方法が書かれています。そこにある通り、PageクラスにNavigationHelperを組み込むには以下のようなコードをPageクラスに追記します。navigationHelper.OnNavigatedFrom(e);}基本的に必要な操作は、NavigationHelperクラスをフィールドに持ち、コンストラクタでNavigationHelperのインスタンスを作成します。そのときNavigationHelperのコンストラクタにページ自身のインスタンスを渡します。することでページの各種イベントなどを適切に処理してLayoutAwarePageが提供してくれてた機能の一部(ショートカットや戻るボタンなど)を提供してくれます。NavigationHelperクラスにはGoBackCommandというコマンドが提供されていて、それが戻るボタンのCommandとバインドされています。この点もLayoutAwarePage内のGoBackイベントハンドラなどでやっていた処理がコマンドでシンプルにあらわされていて個人的に好きです。(中身はそんなに変わらないですが...)次に、ページの履歴やページの一時データの保持などですが、LayoutAwarePageのときはLoadStateとSaveStateというメソッドをオーバーライドして利用していました。NavigationHelperでは、LoadStateイベントとSaveStateイベントが定義されていて、それを購読することで同様の処理が行えます。LoadStateイベントとSaveStateイベントは、いまどき珍しく独自のdelegateとして定義されていて、以下のようなシグネチャを持ちます。e);LoadStateイベントのイベント引数であるLoadStateEventArgsクラスは以下のプロパティを持っています。}画面遷移で前の画面から渡されたパラメータを取得できます。}以前にこのページでSaveStateのときに設定した値が入ったDictionaryを取得します。ページにアクセスするときはnullになります。SaveStateイベントのイベント引数であるSaveStateEventArgsクラスは以下のプロパティを持っています。}ページで一時的に保存したいデータを詰めるDictionaryを取得します。ここで設定した値がLoadStateイベントのときに取得できます。このイベントを処理することで、LayoutAwarePageのときにLoadStateメソッドとSaveStateメソッドで行っていたのと同じ処理が可能になります。ObservableDictionaryクラス通知機能をもったDictionaryです。デフォルトのページのテンプレートでDefaultViewModelプロパティに指定されるためだけに存在してると思われます。RelayCommandクラスICommandインターフェースの、よくある実装です。ExecuteとCanExecuteをデリゲートで指定可能です。NavigationHelperのGoBackCommandプロパティなどで使用されています。StandardStyles.xamlはどこにいった?様々な基本的なスタイルが定義されていたStandardStyles.xamlですがいなくなりました。戻るボタンなどのような基本的なよくあるスタイルは、以下のXAMLで定義されています。Kits\8.1\Include\winrt\xaml\design\generic.xamlテーマごとの色などの定義や、コントロールのテンプレートも定義されています。AppBarButtonは、専用クラス定義され、そのコントロールにアイコンの設定機能などが追加されています。XAMLでボタンのテンプレートを差し替えるだけでAppBarのボタンを作れるとはいえ、専用クラスが用意されていたほうが楽ですね。まとめプロジェクトテンプレートに含まれていたCommon名前空間のクラス構造が大きく変わった(そもそもCommonってフォルダがあって、そこに絶対必要な機能がプロジェクトテンプレートがあるのがおかしいと思ってる)ので、結構最初は戸惑うと思いますが、提供されてる機能はそんなに変わりありません。スナップとかが8.1になって無くなったぶん覚えることが減ってシンプルになったくらいです。NavigationHelperの機能がいらない場合は委譲してる部分のコードを削除するだけでいいのでテンプレートに縛られないページ作りが楽になったので着実に進歩してると思います。2013の正式版の提供が楽しみですね。アプリでページ間で共通の見た目を簡単に作りたい昼間に書き殴ったあれですが、コードに落としてみます。C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。Blogの内容は個人の見解であり、所属する企業を代表するものではありません。)はてなブログをはじめよう!okazukiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。