Я пытаюсь создать приложение UWP (Universal Windows App) с С#. Моя проблема - это элемент управления Frame
: если я использую его без NavigationCacheMode = Required
, каждый раз, когда пользователь возвращается, страница не сохраняется в памяти и будет воссоздана. Если я установил NavigationCacheMode
в Required
или Enabled
, то возврат работает корректно (без нового объекта страницы) , но, если я перехожу на другую страницу того же типа, предыдущий объект страницы перерабатывается и повторно используется (нет нового экземпляра страницы).
Желаемое поведение:
Есть ли способ иметь следующее поведение с исходным элементом управления Frame
(например, в Windows Phone):
- Создайте экземпляр новой страницы в
Navigate()
- Храните экземпляр страницы в
GoBack()
Единственное решение, которое я знаю, - создать собственный элемент управления Frame
, но это приводит к другим проблемам (например: отсутствующий метод SetNavigationState()
и т.д.)
Пример сценария:
Простой пример приложения с тремя страницами: TvShowListPage
, TvShowDetailsPage
, SeasonDetailsPage
.
-
TvShowListPage
- это страница входа. После нажатия наTvShow
перейдите кTvShowDetailsPage
. - Теперь в
TvShowDetailsPage
выберите сезон в списке и перейдите кTvShowDetailsPage
. - Если переходить назад, страницы должны оставаться в памяти, чтобы не перезагружать страницы.
- Но если пользователи возвращаются к
TvShowListPage
и выбирают другойTvShow
, тоTvShowDetailsPage
возвращается в исходное состояние и, возможно, находится в неправильном состоянии (например, показывает свод роя, а не первый, сезонный поворот).
Я ищу поведение по умолчанию для Windows Phone 7: Navigating создает новую страницу в стеке страниц, назад удаляет верхнюю страницу из стека и отображает предыдущую страницу из стека (хранится в памяти).
Решение:
Поскольку решения этой проблемы не было, мне пришлось переопределить все соответствующие классы подкачки: Страница, 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