2016-06-15 1 views
0

J'ai implémenté le service de navigation et le localisateur de modèle de vue. Je peux ouvrir ma page en utilisant OnNavigatedTo correctement. Mais quand la page s'initialise, elle ne passe par aucun des constructeurs déclarés.WP 8.1 Lumière MVVM ne peut pas instancier le constructeur

Ma mise en œuvre du localisateur

INavigationService navigationService = new NavigationService(); 
navigationService.Configure("About", typeof(AboutPage)); 
return navigationService; 

ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 
INavigationService navigationService = CreateNavigationService(); 
SimpleIoc.Default.Register<INavigationService>(() => navigationService); 
SimpleIoc.Default.Register<MainViewModel>(); 

Le constructeur sur ma page

public MainViewModel(INavigationService navigationService) 
{ 
    _navigationService = navigationService; 
} 

Tous les conseils?

+0

Je me demande si une instance du modèle de vue est encore injecté dans la page elle-même? – Aphelion

+0

Comment cela affecte-t-il le problème? – bgvsan

+0

Le viewModel est une dépendance de la vue. Si la vue ne nécessite pas d'une certaine manière le viewModel (généralement une dépendance de constructeur), l'IoC n'instanciera jamais le viewModel lui-même. Je suppose que le constructeur du viewModel est le problème, comme cela est montré dans votre question. – Aphelion

Répondre

0

au lieu de le transmettre comme argument de votre constructeur, vous pouvez utiliser ce qui suit pour récupérer le service de navigation:

public MainViewModel() 
{ 
    _navigationService = ServiceLocator.Current.GetInstance<INavigationService>(); 
} 

L'action de ne crée pas enregistrement encore une instance; l'instanciation est à la demande. Vous trouverez plus de détails sur la classe MVVM Lumière du CIO dans cet article MSDN:

https://msdn.microsoft.com/fr-fr/magazine/jj991965.aspx