Dans le contexte d'une application WPF de style de navigation (NavigationWindow, pas Xbap): P>
est-il possible pour un NavigateDuri d'un hyperlien contenant des paramètres supplémentaires, comme des données de chemin ou une querystring? Par exemple, y a-t-il une manière que je puisse définir mon navigateur sur /product.xaml/123 code> ou
/product.xaml?id=123 code>, et avoir mon produit.xaml la page soit capable de voir qu'il a été appelé avec un paramètre de
123 code>? p>
3 Réponses :
Vous pouvez le faire. Voir http://www.paulstovell.com/wpf-navigation :
Bien que ce ne soit pas évident, vous pouvez passer des données de chaîne de requête sur une page, et extrayez-le du chemin. Par exemple, Votre hyperlien pourrait passer une valeur dans l'URI: p>
Customer selectedCustomer = (Customer)listBox.SelectedItem; this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer));
Où appartiennent votre appel de votre navigationservice? Dans le gestionnaire de clic de l'hyperlien? Cela semble que cela conduirait à beaucoup de câblage supplémentaire dans le code derrière.
Oui, de la même manière que dans ASP.NET MVC, le code pour rendre un hyperlien passe en vue, pas le modèle / contrôleur. La navigation de la vue pour voir devrait être une préoccupation de vue.
D'une certaine manière, il ressemble à ASP.NET MVC: le "lien hypertexte" sera à la vue, mais cela appellera quelque chose pour effectuer le changement de page. J'ai créé un contrôleur pour le faire, avec des méthodes statiques et un objet "MainWindow" statique, qui contient le cadre qui affiche toutes mes pages. Si je veux changer la page, j'appelle simplement 'MainController.Changepage (page) "et ça marche.
Notez que la documentation officielle de MSDN suggère de passer des paramètres de l'URL: msdn.microsoft.com/en-us/library/ff626521 (v = vs.92) .aspx ; En outre, la méthode Naviagte ne semble pas prendre une page comme argument, mais seulement un objet URI
Customer selectedCustomer = (Customer)listBox.SelectedItem; this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer)); Paul Stovell I think that using your suggestion will make your pages not garbage collected because the whole instance will remain on Journal.
La première suggestion permettra la collecte. La deuxième suggestion peut toujours être collectée si vous appelez des moments de navigagerservice.removebackentry suffisamment pour "effacer" le journal. Le cadre WPF est définitivement nul pour cela: paulstovell.com/magellan-page-management
Une autre solution consiste à créer une variable publique sur la page Destiny et à utiliser une propriété get / Set pour assigner une valeur à celle-ci.
à la page: P>
MyPagePath.PageName NewPage = new MyPagePath.PageName(); NewPage.MyVar = 10; this.MainFrameName.NavigationService.Navigate(NewPage);