2016-10-28 2 views
0

Toute la journée, j'appelleNavigateAsync ne naviguait pas quand viewmodel est injecté

await this.NavigationService.NavigateAsync(typeof(Views.MyStankView)); 

Et tout fonctionne très bien. Jusqu'à ce que je x: Liez un bouton clic à un autre viewmodel qui hérite de (MVVM-Légers) ViewModelBase et (Template10 de) INavigable qui a une méthode

public async Task NavigateToMyStankView(object sender, RoutedEventArgs e) 
{ 
    await this.NavigationService.NavigateAsync(typeof(Views.MyStankView)); 
} 

L'appel à

await this.NavigationService.NavigateAsync(typeof(Views.MyStankView)); 

est exécuté, mais je ne vais nulle part. De l'intérieur de ce viewmodel et de son parent, ni OnNavigatingFrom n'est appelé. Pas d'erreurs, pas de navigation.

Ce qui donne? Pourquoi NavigateAsync d'un Viewmodel lié/injecté ne navigue pas? Alors qu'un "dur" viewmodel navigue?

EDIT: Suite à une inspection plus approfondie, this.NavigationService est null?!? Pourquoi ça?

+1

Non responsable de cette façon. Créer un [MCVE] –

+0

Est-ce que votre classe 'App' dans' App.xaml.cs' hérite de 'Bootstrapper'? –

+0

Peut-être afficher des codes complets ou partager un échantillon de base afin que d'autres peuvent enquêter sur elle. –

Répondre

0

Ce comportement est attendu. La propriété NavigationService de votre modèle de vue est injectée par le NavigationService lors de la navigation. Quelque chose comme ViewModel.NavigationService = this;. Si vous injectez un modèle de vue, vous le créez, pas le NavigationService, et la propriété est donc null. Mais ce n'est pas la fin du monde. Vous pouvez facilement contourner ce problème en définissant vous-même la propriété NavigationService de votre modèle de vue, en utilisant la valeur de propriété du modèle de vue principal comme source. Quelque chose comme ça var vm = new MyViewModel { NavigationService = this.NavigationService, Dispatcher = this.Dispatcher };. Une bonne règle générale est la suivante: si la propriété NavigationService est null, vous ne pourrez pas naviguer avec cette propriété. ;-) Juste taquiner. J'espère que ce travail a du sens.

Bonne chance.

+0

Merci pour la réponse, Jerry. Vous voulez dire comme ça? en attente this.NavigationService.NavigateAsync (typeof (Views.MyStankView), nouveau MyStankViewModel {NavigationService = this.NavigationService}); qui se traduit par cette (très apropos) erreur: Message: Une exception non gérée de type 'System.StackOverflowException' s'est produite dans mscorlib.ni.dll – Maelstrom