はじめに
第1回では、Windowsストアアプリケーションの概要と、プロジェクト作成時に選択できる3つのテンプレートの一つ「新しいプロジェクト」テンプレートについて紹介しました。この記事では、残り2つのプロジェクト「分割アプリケーション」と「グリッドアプリケーション」を解説します。
「新しいアプリケーション」が機能の少ないシンプルなテンプレートだったのに比べて今回紹介するテンプレートはいろいろな機能が含まれています。どれもWindowsストアアプリケーション開発に欠かせない概念です。ぜひ理解しておきましょう。
分割アプリケーション
「分割アプリケーション」は2ページ構成のプロジェクトです。最初のページでグループ化された項目のリストを表示します。グループを選択することで、グループのアイテム一覧を表示するページに遷移するような構成のアプリケーションを作成するのに向いています。
「分割アプリケーション」には「新しいアプリケーション」プロジェクトにはなかった補助クラスが追加されていますので、その解説を中心に変更点を見ていきましょう。
なお、分割アプリケーションの構成の説明には、データバインディング、データコンバーター、VisualStateなどの概念の理解が必要となります。これらの概念になじみのない方は、本記事をスタートとして、これらのテーマを学んでみてください。
Common
「分割アプリケーション」では「Common」フォルダの中に多くのファイルが含まれています。「Common」フォルダの一覧は以下です。
- BindableBase.cs
- BooleanNegationConverter.cs
- BooleanToVisibilityConverter.cs
- LayoutAwarePage.cs
- ReadMe.txt
- RichTextColumns.cs
- StandardStyles.xaml
- SuspensionManager.cs
「StandardStyles.xaml」は前回紹介した「新しいアプリケーション」プロジェクトと共通です。それ以外は「新しいアプリケーション」には存在しなかったファイルです。
「新しいアプリケーション」プロジェクトには「BindableBase.cs」などのファイルがプロジェクトに存在しませんでした。
画面は「新しいアプリケーション」のようなシンプルな状態からスタートしてCommon以下のファイルは利用したいというケースもあります。その場合はプロジェクトの項目追加でCommon以下のどれかを利用するような項目を追加すると同時にCommon以下のファイルが追加されます。たとえば「基本ページ」「分割ページ」などがそれに当たります。
BindableBase.cs
「BindableBase.cs」は、データバインディングのベースとなるクラスです。
データバインディングとは、View(XAML)のプロパティとデータ(C#のプロパティなど)をバインド(結合)する仕組みです(詳細は後述)。
データバインディングを利用することで、Viewとデータの疎結合が実現できます。XAMLを用いた開発プラットフォーム(WPF、Silverlight、Windowsストアアプリケーション)では、データバインディングの理解はクラス設計、開発効率の向上に役立ちますのでぜひマスターしてください。
BooleanNegationConverter.cs
「BooleanNegationConverter.cs」には、データバインディングで利用するコンバーターが定義されています。コンバーターはIValueConverterを実装する必要があり、ConvertとConvertBackというメソッドを持ちます。それぞれデータからViewに値を渡す際に変換(Convert)するケースと、Viewでの変更をデータに伝える際に変換(ConvertBack)する際に呼び出されます。
BooleanNegationConverterクラスはboolean型の値を逆転させる(trueをfalseに、falseをtrueに)だけのクラスなので、あまり実用的ではありませんが、コンバーターの動作を確認するのには向いています。
public sealed class BooleanNegationConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { return !(value is bool && (bool)value); } public object ConvertBack(object value, Type targetType, object parameter, string language) { return !(value is bool && (bool)value); } }
ConverterはView(XAMLコード)側で以下のように利用します。
<textblock text="{Binding Date, Converter={StaticResource DateToStringConverter}}"></textblock>
BooleanToVisibilityConverter.cs
「BooleanToVisibilityConverter.cs」もコンバーターです。データ側のプロパティがbool型の場合に、その値をXAMLの表示・非表示を表すVisibility列挙体に変換するコンバーターです。コードのシンプルさは「BooleanNegationConverter.cs」と同等ですが、実用性はこちらが上です。
LayoutAwarePage.cs
ページクラスにさまざまな機能を追加するベースクラスです。
「新しいプロジェクト」のMainPageクラスはPageクラスを継承していました。今回紹介するプロジェクトテンプレートは、Pageクラスを継承して機能を追加したLayoutAwarePageクラスを継承することで、様々な機能が利用可能になっています。
「前のページに戻る」「ページ遷移の履歴を一つ進む」機能や、スナップ表示などの表示状態変更時の処理などがLayoutAwarePageクラスには追加されています。
RichTextColumns.cs
「RichTextColumns.cs」は、一段では収まらないテキストを左から右に自動で段を増やして表示してくれるコントロールです。量の多いテキストデータなどを画面に表示する場合や、縦にスクロールバーを表示したくない場合などに自動で右に段落を増やしてくれる「RichTextColumns.cs」は重宝します。
「RichTextColumns.cs」の使用例は、プロジェクトテンプレートの「グリッドアプリケーション」の「ItemDetailPage.xaml」にあります。
SuspensionManager.cs
「SuspensionManager.cs」は、Windowsストアアプリケーションが中断状態になる際のデータ保存、再開時のデータ復元に利用できます。「SuspensionManager.cs」を利用可能なクラスは、LayoutAwarePageを継承したページクラスです。
「分割アプリケーション」の「App.xaml.cs」では、SuspensionManagerを利用した復元処理が記載されていますので参考にしてみてください。