注入viewmodel时,NavigateAsync不会导航

时间:2016-10-28 17:59:14

标签: uwp mvvm-light template10 navigationservice

一整天,我正在打电话

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

一切都很好。 直到我x:绑定一个按钮点击另一个视图模型继承自(MVVM-Light)的ViewModelBase和(Template10's)INAVigable有一个方法

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

致电

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

被执行,但我不去任何地方。从这个viewmodel和它的父模型中,OnNavigatingFrom都没有被调用。没有错误,没有导航。

是什么给出的?为什么绑定/注入的viewmodel的NavigateAsync不能导航?虽然“硬”视图模型可以导航?

编辑:进一步检查,this.NavigationService为空?!?为什么会这样?

1 个答案:

答案 0 :(得分:0)

这是预期的行为。导航期间NavigationService会注入视图模型的NavigationService属性。像ViewModel.NavigationService = this;这样的东西。如果您正在注入视图模型,那么您正在创建它,而不是NavigationService,因此该属性为null。但这不是世界末日。您可以使用主视图模型中的属性值作为源来自行设置视图模型的NavigationService属性,从而轻松解决此问题。像这样var vm = new MyViewModel { NavigationService = this.NavigationService, Dispatcher = this.Dispatcher };

一个好的经验法则是,如果NavigationService属性为null,则您无法使用它进行导航。 ;-)只是戏弄。我希望这种解决方法有意义。

祝你好运。