Share via


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

更新 : 2007 年 11 月

このサンプルでは、IProvideCustomContentState および CustomContentState を使用して、複数のページ インスタンス間にわたるページ状態の複数の項目を記憶する方法を示します。

このサンプルでは、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 では、状態情報をページ エントリと共にナビゲーション履歴に格納し、ナビゲーション履歴を使用してナビゲートされた場合に、その情報を新しいページ インスタンスに再び適用できるようにするインフラストラクチャが提供されています。

このサンプルでは、ページに IProvideCustomContentState を実装し、そこで 1 つ以上の項目を含む状態のセットを記憶する方法を示します。あるページから他の場所へナビゲートすると、WPF では GetContentState を呼び出し、必要な状態を記憶するようにページに依頼します。GetContentState は、状態を格納およびリプレイするために作成した CustomContentState のサブクラスを返します。

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

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

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

参照

処理手順

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

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