Я пытаюсь создать приложение 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