WPF / Silverlight NavigationService backstack - PullRequest
0 голосов
/ 01 ноября 2010

Я пишу приложение с использованием WPF (должно применяться и к Silverlight), где у меня есть рамка в главном окне, и я использую NavigationService для навигации по страницам рамки.

IЯ использую NavigationService.GoBack, чтобы успешно вернуться на предыдущую страницу, но бывают случаи, когда мне нужно будет перейти на определенную страницу в бэкстеке NavigationService.Если страница не существует в backstack, тогда я просто создам новую страницу и перейду к ней.Делая это, я надеюсь, что состояние страницы будет сохранено, если она существует в backstack, но если она не будет создана, будет создана новая.

ЗДЕСЬ ВОПРОС!

Кажется, я не могу понять, как получить доступ к backstack, чтобы проверить, существует ли страница, и как перейти к ней, если она есть.

Я также хотел бы упомянуть, что я 'я не использую URI для навигации, а вместо этого объекты страницы, так как мне нужно передавать значения между страницами.

1 Ответ

2 голосов
/ 01 ноября 2010

Кажется, я не могу понять, как получить доступ к бэкстаку, чтобы проверить, существует ли страница, и как перейти к нему, если он есть.

Видимо, нетспособ получить доступ к обратному стеку из NavigationService, но Frame предоставляет свойство BackStack, поэтому вы можете сделать что-то вроде:

if (frame.BackStack.Cast<object>().Contains(thePage))
...

Однако, похоже, нет способа прыгнутьнепосредственно к конкретной записи в истории ... Лучшее, что вы можете сделать, это найти индекс записи и вернуться назад N раз, чтобы попасть туда, что довольно уродливо:

int index = frame.BackStack.Cast<object>()
                 .Select((page, i) => new { page, i + 1 })
                 .Where(x => Equals(x.Page, thePage))
                 .FirstOrDefault();
if (index > 0)
{
    for(int i = 0; i < index; i++) frame.GoBack();
}
else
{
    frame.Navigate(thePage);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...