2017-06-29 2 views
0

Je n'arrive pas à transmettre les paramètres de navigation entre 2 vues dans une application WPF PRISM.PRISM MVVM Les événements INavigationAware dans le prisme ne se déclenchent pas

La structure de base de mon application est la suivante: J'ai un dossier viewmodels, à l'intérieur que j'ai un dossier pour chaque "section" de mon application simplement pour aider à structurer les choses logiquement. Commandes, projets

La même chose s'applique aux vues.

Je navigue d'une vue dans le dossier des commandes à une dans le dossier Projets.

La navigation proprement dite fonctionne et l'application atteint un point d'arrêt dans mon constructeur pour le second viewmodel, mais les méthodes de l'interface INavigationAware ne sont jamais appelées.

Je ne suis pas sûr si cela a quelque chose à voir avec les vues/viewmodels existant dans différents espaces de noms en raison des dossiers?

Voici les extraits de code importants que j'utilise:

Bootstrapper

Container.RegisterType(typeof(Object), typeof(ConfirmOrders), "Orders.ConfirmOrders"); 
Container.RegisterType(typeof(Object), typeof(QuotedCosts), "Projects.QuotedCosts"); 

Navigation Pour QuotedCosts de ConfirmOrders

NavigationParameters par = new NavigationParameters(); 
par.Add("ProjectID", ProjID); 
_regionManager.RequestNavigate("ContentRegion", "Projects.QuotedCosts", par); 

QuotedCosts viewmodel Whos Navigation Events ne sont jamais appelés

public class QuotedCostsViewModel : ViewModelBase, INavigationAware 
    { 
     private IProjectService _projectService; 

     private int ProjectID { get; set; } 
     public mProject CurrProject { get; protected set; } 

     public QuotedCostsViewModel(IProjectService projectService) 
     { 
      _projectService = projectService; 
      CurrProject = _projectService.GetProjectDetails(ProjectID); 
     } 

     public void OnNavigatedTo(NavigationContext navigationContext) 
     { 
      ProjectID = int.Parse(navigationContext.Parameters["ProjectID"].ToString()); 
     } 

     public bool IsNavigationTarget(NavigationContext navigationContext) 
     { 
      return true; 
     } 

     public void OnNavigatedFrom(NavigationContext navigationContext) 
     { 

     } 

    } 
+0

Pourriez-vous s'il vous plaît poster le code de l'endroit où vous envoyez les paramètres à savoir Uri requête que vous utilisez .. – stylishCoder

+0

Il est dans le deuxième bloc de code , Je n'utilise pas la requête Uri et utilise plutôt la surcharge des paramètres de navigation – ThatChris

+0

Le code a l'air ok @ ThatChris besoin d'identifier en remplaçant les espaces de noms .. Autrement son un hit & procès problème – stylishCoder

Répondre

0

Alors je viens de réaliser que le problème était dû à mon incompréhension de l'ordre que les différentes méthodes du viewmodel était appelé.

Je définissais un paramètre dans la méthode NavigatedTo qui devait être utilisé dans le constructeur pour remplir mon viewmodel, sans réaliser que le constructeur était appelé avant l'événement.

Déplacement du code incriminé sur le constructeur et en OnNavigatedTo a résolu le problème

+0

bien mettre à jour votre réponse (c'est-à-dire le code) ici aussi – stylishCoder