C# で UWP (Universal Windows App) アプリケーションを作成しようとしています。私の問題はFrame
コントロールです: なしNavigationCacheMode = Required
で使用すると、ユーザーが戻るたびにページがメモリに保持されず、再作成されます。またはに設定NavigationCacheMode
すると、戻ることは正しく機能します (新しいページ オブジェクトはありません)が、同じタイプから別のページに移動すると、前のページ オブジェクトがリサイクルされて再利用されます (新しいページ インスタンスはありません)。Required
Enabled
望ましい動作:
元のコントロールで次の動作を行う方法はありますかFrame
(Windows Phone のように):
- に新しいページ インスタンスを作成する
Navigate()
- ページ インスタンスを維持する
GoBack()
私が知っている唯一の解決策は、独自のFrame
コントロールを作成することですが、これは他の問題につながります (例:SetNavigationState()
メソッドの欠落など...)
サンプル シナリオ:
TvShowListPage
、TvShowDetailsPage
、 の3 つのページを使用した簡単なアプリケーションの例SeasonDetailsPage
。
TvShowListPage
エントリーページです。をクリックした後、 にTvShow
移動しTvShowDetailsPage
ます。TvShowDetailsPage
リストでシーズンを選択し、 に移動しますTvShowDetailsPage
。- 戻る場合は、ページのリロードを避けるためにページをメモリに残す必要があります。
- しかし、ユーザーが戻って別のもの
TvShowListPage
を選択すると、リサイクルされ、おそらく間違った状態になります (たとえば、最初のシーズン ピボットの代わりにキャスト ピボットを表示する)。TvShow
TvShowDetailsPage
Windows Phone 7 のデフォルトの動作を探しています。移動するとページ スタックに新しいページが作成され、戻るとスタックから一番上のページが削除され、スタック (メモリに保存されている) から前のページが表示されます。
解決:
この問題の解決策がなかったため、Page、Frame、SuspensionManager など、ページングに関連するすべてのクラスを再実装する必要がありました。
これらすべてのクラスを提供するライブラリ MyToolkitは、 https ://github.com/MyToolkit/MyToolkit/wiki/Paging-Overview からダウンロードできます。
参考文献:
- http://www.jayway.com/2012/05/25/clearing-the-windows-8-page-cache/ : 良い解決策はありません
- http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/88e6d1b3-1fa6-4ab4-a816-e77c86ef236f/ : 独自の Frame クラスを実装しても機能しないため、解決策にはなりません。
SuspensionManager