ページ インスタンス間で状態の項目を 1 つ記憶する

更新 : 2007 年 11 月

このサンプルでは、依存関係プロパティを使用して、複数のページ インスタンス間にわたるページ状態の項目を 1 つ記憶する方法を示します。

このサンプルでは、Windows Presentation Foundation の特定の機能を示します。そのため、アプリケーション開発のベスト プラクティスに従っていません。Windows Presentation Foundation (WPF) と Microsoft .NET Framework のアプリケーション開発ベスト プラクティスの包括的な説明については、適宜、次のトピックを参照してください。

ユーザー補助 - 「ユーザー補助のベスト プラクティス

ローカリゼーション - 「WPF のグローバリゼーションおよびローカリゼーションの概要

パフォーマンス - 「WPF アプリケーションのパフォーマンスの最適化

セキュリティ - 「Windows Presentation Foundation のセキュリティ

Download sample

サンプルのビルド

  • Windows ソフトウェア開発キット (SDK) をインストールして、そのビルド環境のコマンド ウィンドウを開きます。[スタート] メニューの [すべてのプログラム]、[Microsoft Windows SDK] の順にポイントし、[CMD シェル] をクリックします。

  • サンプルをハード ディスク ドライブにダウンロードします。通常は、ソフトウェア開発キット (SDK) のドキュメントからダウンロードします。

  • ビルド環境のコマンド ウィンドウからサンプルをビルドするには、サンプルのソース ディレクトリに移動します。コマンド プロンプトで「MSBUILD」と入力します。

  • Microsoft Visual Studio でサンプルをビルドするには、サンプル ソリューションかプロジェクト ファイルを読み込んで、Ctrl キーと Shift キーを押しながら B キーを押します。

サンプルの実行

  • コンパイルしたサンプルをビルド環境のコマンド ウィンドウから実行するには、サンプルのソース コード フォルダの下にある Bin\Debug または Bin\Release フォルダで .exe ファイルを実行します。

  • コンパイルしたサンプルを Visual Studio でデバッグしながら実行するには、F5 キーを押します。

解説

既定では、Windows Presentation Foundation (WPF) はナビゲーション履歴に複数のページ インスタンスを格納するのではなく、ページがナビゲートされるたびに、ページの新しいインスタンスが作成されます。WPF でページ インスタンスをナビゲーション履歴に保持することはできますが、メモリを大量に消費する可能性があります。

しかし WPF では、状態情報をページ エントリと共にナビゲーション履歴に格納できるようにするインフラストラクチャが提供されています。この場合、ページがインスタンス化された後、格納されている状態を使用して、そのページの状態を再構築できます。

このサンプルでは、履歴として保存された依存関係プロパティを使用して、ナビゲーション履歴でページの状態を格納および取得する方法を示します。履歴として保存された依存関係プロパティは、次のメタデータを持つ依存関係プロパティです。

Journal

この方法は、複数のページ インスタンス間にわたってページ状態の項目を 1 つ格納する必要が生じたときに最も有用です。複数のページ インスタンス間で状態のセットを 1 つ記憶する場合は、IProvideCustomContentState の使用を検討してください (「ページ インスタンス間で状態のセットを 1 つ記憶する」を参照)。1 つのページ インスタンスの状態のセットを複数記憶する方法については、「ページ インスタンスごとに状態のセットを複数記憶する」を参照してください。

Aa972173.alert_caution(ja-jp,VS.90).gif重要 :

カスタム コンテンツ状態に情報を格納するとき、状態を記憶するページのインスタンスへの参照を格納することはできません。これは、WPF がそのページ インスタンスを解放できなくなり、ナビゲーション履歴の既定動作の目的が損なわれてしまうためです。参照を格納する必要がある場合は、代わりに KeepAlive の使用を検討してください。

参照

処理手順

ページ インスタンス間で状態のセットを 1 つ記憶する

ページ インスタンスごとに状態のセットを複数記憶する