Перейти назад, не удаляя фактическую страницу из BackStack

Я разрабатываю приложение для WP 8, и у меня проблема с навигацией.

Я не могу найти способ перейти к странице в моем заднем стеке, не теряя фактического состояния страницы.

Ситуация такова:

  1. Я нахожусь на странице A и перехожу на страницу B, так что задний стек содержит только A.
  2. На странице B я хочу вернуться на страницу A, но со страницей B, которая сохраняется в заднем стеке, поэтому, когда я снова нахожусь на странице A, я могу вернуться на страницу B, сохранив ее состояние.

Итак, вот он: А --> Б --> А --> Б, это своего рода цикл, но это не так. На странице A показаны элементы, которые также показаны на странице B, с меньшими подробностями, но со страницы B я могу перейти на страницу A, чтобы просмотреть подробности, а затем снова и снова.

Это может показаться сложным, но уверяю вас, это довольно интуитивно понятно :) так работает на Android и iOS.

Можно ли в любом случае добавить страницу B в стек навигации перед страницей A, поэтому, когда я вызываю NavigationService.GoBack(), он возвращается на страницу A с предыдущим состоянием, а затем делает то же самое от A до B.

Заранее спасибо!!!


person Martin    schedule 05.02.2015    source источник


Ответы (2)


Есть несколько вариантов. Если вы используете стандартный шаблон MVVM, то на самом деле вы не сохраняете «состояние страницы» (если только вы не имеете в виду такие вещи, как положение прокрутки в списках или выбранный текстовый элемент управления), вы сохраняете данные. И эти данные будут там при следующем переходе на страницу Б. Вы можете посмотреть это видео и файл Статья MSDN, на которую он указывает, чтобы получить дополнительную информацию о привязке данных и о том, как хранить данные в глобальном состоянии, которое будет повторно привязано к странице при следующем переходе.

Если привязка данных не решает проблему, другой вариант — вообще не использовать разные страницы, а просто иметь A и B как два разных контейнера на одной физической странице. Затем вы можете перехватывает кнопку "Назад", чтобы имитировать переход "назад", когда вам нужно переключиться обратно в Контейнер A.

person Peter Torr - MSFT    schedule 08.02.2015
comment
Привет! Спасибо за ответ. Первый вариант не будет работать, потому что на WP вы либо отбрасываете страницу, чтобы перейти к предыдущей, либо создаете новую страницу для перехода вперед при навигации. Единственный способ перезагрузить предыдущую страницу — вернуться назад, а единственный способ сохранить состояние страницы — перейти вперед. Мне нужно вернуться и сохранить состояние, а это невозможно. Что касается второго решения, обе страницы добавляют некоторую сложность, и решить ее таким образом невозможно. Сначала это было сделано так, но потом пришлось разделить на две страницы из-за проблем с производительностью. - person Martin; 09.02.2015
comment
Либо пользовательский интерфейс достаточно прост, чтобы одновременно хранить обе страницы в памяти (второе решение, о котором вы говорите, невозможно), либо вам нужно выгрузить пользовательский интерфейс (что и делает первый вариант). Вы переходили по ссылкам на видео/статью? На привязку данных не влияет тот факт, что объекты пользовательского интерфейса уничтожаются. - person Peter Torr - MSFT; 09.02.2015

Используйте этот раздел справки, чтобы узнать, как сохранять и восстанавливать состояние страницы для Windows Phone 8. Стек навигации может хранить только URI страницы и небольшое количество данных (в параметре URI).

Так:

NavigationService.Navigate(new Uri("/SecondPage.xaml?var=value", UriKind.Relative));

В SecondPage.xaml вы можете получить значение val. Вот подробный пример .

 if (NavigationContext.QueryString.TryGetValue("val", out msg))
person crea7or    schedule 05.02.2015