Stateプロパティを使用して画面の状態を復帰させる


Windows Phone 7のライフサイクルではWindows Phone 7(以降WP7)プラットフォームのライフサイクルについて紹介しました。

今回はライフサイクルの解説内で数回登場したStateプロパティについて解説します。

Stateプロパティはアプリケーションが廃棄状態になってしまった場合に画面の状態を復元させるために使用します。

詳細は以下から。

Stateプロパティは画面からユーザーが離れる前の状態(OnNavigatedFromメソッドコール時)に画面の状態(テキストボックスの入力値など)を保存し、廃棄状態から復帰する時(OnNavigatedToメソッドコール時)に保存したデータを読み込み、適切なオブジェクトに配置します。

画面の状態の保存

画面の状態はOnNavigatedFromメソッドコール時にStateプロパティに保存します。

以下はテキストボックスに入力された情報をStateプロパティに保存するサンプルコードです。

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    State["TextBoxValue"] = textBox1.Text;
    base.OnNavigatedFrom(e);
}

3行目でStateプロパティに値を格納しています。
[]内の値はキー値で、保存した値を取得する際に使用します。

画面の状態を復帰させる

画面の状態を復帰させるためのデータはOnNavigatedToメソッドコール時にStateプロパティから取得します。

以下はOnNavigatedFromメソッドコール時にStateプロパティに保存された値を取得するサンプルコードです。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    if (0 < State.Count)
    {
        textBox1.Text = (string)State["TextBoxValue"];
    }
    base.OnNavigatedTo(e);
}

3行目でStateプロパティのCountを使用してStateに値が格納されているかを確認しています。
Stateに値が格納されていない場合はCountの値は0になります。

5行目ではStateから保存の際に指定したキー値を指定して値を取得しています。

動作確認

Windows Phone 7.1の実行環境ではメモリリソースが潤沢にあるため、なかなかアプリケーションが廃棄状態になることはありません。

そこで、プロジェクトの設定を変更することで、強制的に廃棄状態にすることができます。

まずはVisual Studioのソリューションエクスプローラーでプロジェクトにカーソルを合わせて右クリック→[プロパティ]を選択します。

次にプロジェクトのプロパティにて[デバッグ]タブを選択し、”デバッグ中の非アクティブ化時に廃棄する”にチェックを入れます。

後はプロジェクトを実行し、テキストボックスに文字を入力→[スタート]キー押下→[バック]キー押下し、アプリケーションが再起動されたときにテキストボックスに文字が出力されていれば復帰処理が行われていることが確認できます。