一整天,我正在打电话
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为空?!?为什么会这样?
答案 0 :(得分:0)
这是预期的行为。导航期间NavigationService
会注入视图模型的NavigationService
属性。像ViewModel.NavigationService = this;
这样的东西。如果您正在注入视图模型,那么您正在创建它,而不是NavigationService
,因此该属性为null。但这不是世界末日。您可以使用主视图模型中的属性值作为源来自行设置视图模型的NavigationService
属性,从而轻松解决此问题。像这样var vm = new MyViewModel { NavigationService = this.NavigationService, Dispatcher = this.Dispatcher };
。
一个好的经验法则是,如果NavigationService
属性为null,则您无法使用它进行导航。 ;-)只是戏弄。我希望这种解决方法有意义。
祝你好运。