Gérer plusieurs vues WPF dans une application

donc j'ai vu qu'il existe un service de Navigation dans WPF pour maintenir un flux à travers une application. Je ne suis pas vraiment sur le marché pour les fonctionnalités de type back and forward. Je suis juste à la recherche d'un bon moyen de passer d'une vue à l'autre quand un bouton sur une vue particulière est appuyé. J'utilise MVVM, donc je ne sais pas si je peux laisser L'application.XAML.cs peut contenir une copie de chaque vue ou ViewModel et laisser une commande ViewModel appeler dans App.XAML.cs pour faire le changement. Peut-être que je devrais juste gérer l'événement de Clic sur le bouton et faire un peu de saveur.Close (); NewWindow.Montrer.;)(

Comme pour beaucoup de choses dans WPF, celui-ci n'est pas intuitif pour moi bien qu'il y ait probablement quelques solutions simples.

Merci!

4
demandé sur Bob 2009-12-01 21:39:20

2 réponses

j'ai créé une classe" window loader " que la classe app instancie au démarrage de l'application. Le chargeur de fenêtre a un dictionnaire qui maintient une association de types de modèles de vue et de types de vue. Il a aussi une méthode qui prend une instance de modèle de vue, résout la vue basée sur le type du modèle de vue, instancites la vue, fixe le datacontext de la vue au modèle de vue puis l'affiche. Le chargeur de fenêtre s'enregistre également pour un événement dans le modèle de vue qui est soulevé lorsque la fenêtre veut fermer.

le chargeur de fenêtre implémente une interface IWindowLoader et une référence à celle-ci est conservée dans chaque modèle de vue (lorsque le chargeur de fenêtre instancie un modèle de vue, il s'assigne à une propriété publique IWindowLoader dans le modèle de vue). Ainsi, n'importe quel modèle de vue peut faire que n'importe quel autre modèle de vue soit montré sans connaître les vues et sans faire l'affichage lui-même. En outre, le chargeur de fenêtre peut facilement être moqué pour le test.

quand je suis allé par le même processus que vous êtes maintenant, j'ai trouvé beaucoup d'exemples de ce même modèle de base. J'ai juste fini de rouler mon propre.

2
répondu Mark Bostleman 2009-12-01 20:29:26

une façon de résoudre ce problème est d'introduire contrôleurs qui sont responsables du flux de travail de l'application. Ils créent, montrent et ferment plusieurs vues dans l'application.

Comment cela fonctionne peut être vu dans les exemples d'applications de la WPF Cadre applicatif (WAF) du projet.

2
répondu jbe 2009-12-05 10:55:34