Древовидная навигация по списку WP

В приложении WP у меня есть древовидный список, в котором пользователь может видеть категории и элементы.

Если пользователь щелкнет элемент -> я перейду на страницу элемента.

Но если пользователь хочет углубиться и щелкает категорию -> мне нужно показать ему внутренние категории и элементы, поэтому было бы здорово, если бы можно было снова открыть эту страницу и показать внутренние категории и элементы, потому что она имеет < strong>абсолютно такая же логика.

Насколько я знаю, я не могу запустить несколько экземпляров одного Page.

Я мог бы показать внутренние категории в текущем экземпляре этой страницы, просто изменив содержимое списка, но таким образом у меня возникли 2 проблемы:

  1. При нажатии кнопки «Назад» мне нужно показать предыдущий список, поэтому мне нужно сохранить все ранее открытые списки в чем-то вроде Stack
  2. Я хочу показать анимацию навигации по странице для пользователя (также для нажатия клавиши «Назад»), чтобы он увидел, что он углубляется в древовидный список или что он возвращается в предыдущее состояние.

Может быть, кто-то из вас уже делал что-то подобное, не могли бы вы дать мне какой-нибудь совет?


person Artem Zinnatullin    schedule 03.04.2013    source источник


Ответы (1)


Вы МОЖЕТЕ иметь несколько экземпляров одной и той же страницы.

Предполагая, что каждая категория имеет уникальный идентификатор, вы просто переходите на страницу и предоставляете параметр идентификатора в строке запроса. Зарезервируйте один идентификатор (например, 0) для самых верхних данных.

Итак, ваша страница категории изначально будет называться так

NavigationService.Navigate("MyCategoriesPage?categoryId=0");

в методе OnNavigatedTo вы анализируете идентификатор категории и считываете данные на основе идентификатора из вашего бэкэнда или хранилища.

Когда пользователь нажимает на категорию, вы переходите на ту же страницу на основе идентификатора категории, например:

NavigationService.Navigate("MyCategoriesPage?categoryId=12");

Windows Phone сохраняет задний стек, поэтому навигация по кнопке «Назад» будет обработана. Единственное, что вы должны иметь в виду, это то, что приложение может быть захоронено, если пользователь деактивирует и повторно активирует приложение. В этом случае данные списка не будут сохранены. Чтобы справиться с этим, убедитесь, что вы следуете стандартному шаблону в методе OnNavigatedTo:

if (!_isInitialized)
{
   int categoryId = int.Parse(NavigationContext.QueryString["categoryId"]);
   ReadData(categoryId);
   _isInitialized = true;
} 
person Alex    schedule 05.04.2013