2010-08-23 12 views
2

Je considère un scénario où j'aurais une application Silverlight 3 (ou plus), qui utiliserait le cadre SL Navigation. Supposons (pour simplifier) ​​que ce serait un simple forum. Dans mon application, j'aurais une page nommée Forums.xamlSilverlight Navigation + Params?

Normalement, lorsque je navigue vers la page en question, l'URL du navigateur change et la chaîne de fin correspond au nom de la page.

Normalement, il est possible d'accéder à un message sur le forum en fournissant l'identifiant du message dans l'url (pour accéder directement à l'article du forum). Une telle chose est-elle possible dans Silverlight?

Répondre

2

Comme toujours, cela dépend de ce que vous recherchez. Si vous voulez juste tirer la valeur de chaîne de requête lorsque vous avez atterri sur la page, utilisez le dictionnaire fourni par NavigationContext.QueryString:

En supposant que la page a été appelée avec l'URL suivante:

mainFrame.Navigate(new Uri("/Page1.xaml?Param=value", UriKind.Relative)); 

Le résultant OnNavigatedTo override pourrait ressembler à ceci:

// Executes when the user navigates to this page. 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     if (NavigationContext.QueryString.ContainsKey("Param")) 
     { 
      paramText.Text = NavigationContext.QueryString["Param"]; 
     } 
    } 

Ensuite, il est à vous pour régler le contenu sur « Page1 » en fonction du paramètre entrant. Maintenant, si vous voulez utiliser Uri Mapping et nettoyer votre Uri un peu, vous pouvez déclarer un UriMapper et le remettre à votre cadre de navigation, et l'utiliser pour changer votre URL "propre" en celle qui a une chaîne de requête .

 <Navigation:UriMapper x:Key="PageMapper"> 
      <Navigation:UriMapping Uri="/Things/{value}" MappedUri="/Page1.xaml?Param={value}"/> 
     </Navigation:UriMapper> 

Appelé avec:

mainFrame.Navigate(new Uri("/Things/newValue", UriKind.Relative)); 

travaillera avec le même appel énumérés ci-dessus dans OnNavigatedTo, avec « newValue » passé comme la chaîne de requête (dans votre cas, l'identifiant) et les éléments suivants apparaissant dans la barre d'adresse:

'http://localhost:1877/SilverlightApplication3TestPage.aspx#/Things/newValue

+0

Ceci est une réponse absolument génial. À votre santé – Maciek