Pour passer d’une page à une autre sous Windows Phone 7 avec Silverlight, nous utilisons la classe NavigationService et plus précisément sa méthode Navigate(Uri).
Or, il est finalement assez fréquent de vouloir naviguer vers la même page mais en changeant des données statiques (par exemple un objet racine ou un DataContext).
Le truc balot c’est que le Windows Phone 7 ne supporte pas de naviguer vers la même Uri.
Ainsi le code suivant ne marche pas deux fois:
NavigationService.Navigate(new Uri("/CollectionPivotPage.xaml", UriKind.Relative));
FrameworkElement root = Application.Current.RootVisual as FrameworkElement;
root.DataContext = (sender as FrameworkElement).DataContext;
Ce qui est dommage car les services de navigations apportent le support du Back qui est bien pratique.
Pour résoudre ce problème, il suffit tout bêtement de faire en sorte que l’URI ne soit jamais la même:
NavigationService.Navigate(new Uri("/CollectionPivotPage.xaml?dummy=" +
App.GetNextDummy(), UriKind.Relative));
La méthode GetNextDummy retournant toujours un entier long de plus en plus grand:
static long dummyGenerator;
public static long GetNextDummy()
{
return dummyGenerator++;
}
Windows Phone, .Net
Windows Phone 7