2010-11-01 8 views
0

J'écris une application en utilisant WPF (devrait également s'appliquer à Silverlight) où j'ai un cadre dans une fenêtre principale et j'utilise le NavigationService pour naviguer à travers les pages du cadre. J'utilise NavigationService.GoBack pour retourner à la page précédente mais il y a des fois où je dois aller à une page spécifique dans le backstack de NavigationService. Si la page n'existe pas dans le backstack, je vais simplement créer une nouvelle page et y accéder. En faisant cela, j'espère que l'état de la page sera conservé s'il existe dans le backstack, mais si ce n'est pas le cas, un nouveau sera créé.WPF/Silverlight NavigationService backstack

VOICI LA QUESTION!

Je n'arrive pas à trouver comment accéder au backstack pour vérifier si la page existe, et comment y accéder si c'est le cas.

Je voudrais également mentionner que je n'utilise pas d'URI pour naviguer, mais plutôt des objets de page car j'ai besoin de passer des valeurs entre les pages.

Répondre

2

Je n'arrive pas à trouver comment accéder au backstack pour vérifier si la page existe, et comment y accéder si c'est le cas.

Apparemment, il n'y a pas moyen d'accéder au backstack du NavigationService, mais Frame expose une propriété BackStack, de sorte que vous pouvez faire quelque chose comme:

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

Cependant, il ne semble pas être un moyen pour sauter directement à une entrée spécifique dans l'histoire ... Le mieux que vous pouvez faire est de trouver l'index de l'entrée, et revenir N fois pour y arriver, ce qui est assez moche:

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); 
} 
+0

Un grand merci pour y nos commentaires Thomas, je suis étonné que le backstack ne soit pas accessible! Votre code a été utile aussi, merci encore. Mitch – Mitch

+0

Est-ce encore valide? Il semble qu'un ContentFrame dans Silverlight n'ait pas de propriété BackStack. –

+0

@MikeC., Cette propriété ne semble pas exister dans Silverlight. Encore une autre limitation de SL ... –