给定一个具有三个视图和相应视图模型的 Prism 7 UWP 应用程序:
containerRegistry.RegisterForNavigation<BlankPage1, BlankPage1ViewModel>();
containerRegistry.RegisterForNavigation<BlankPage2, BlankPage2ViewModel>();
containerRegistry.RegisterForNavigation<BlankPage3, BlankPage3ViewModel>();
如果我们从 BlankPage1 导航到 BlankPage2 并传递一个参数(来自 ViewModel1 中的命令):
public virtual DelegateCommand GoToPage2Command => new DelegateCommand(GoToPage2);
public virtual async void GoToPage2() {
await NavigationService.NavigateAsync("BlankPage2", null, ("param", 5678));
}
在OnNavigatedToAsync
重写BlankPage2ViewModel
参数时正确传入。
BlankPage2ViewModel
现在,如果我们从to导航BlankPage3ViewModel
,通过一个命令并传递另一个参数
public virtual DelegateCommand GoToPage3Command => new DelegateCommand(GoToPage3);
public virtual async void GoToPage3() {
await NavigationService.NavigateAsync("BlankPage3", null, ("param", 1234));
}
这再次起作用,参数值1234
被传递给BlankPage3ViewModel
.
但是,现在如果我们导航回BlankPage2ViewModel
:
await NavigationService.GoBackAsync();
OnNavigatedToAsync
没有参数被传递回BlankPage2ViewModel
. 我们当然希望看到参数值5678
?
注意:我们还设置NavigationCacheMode
在Required
每个视图内部。
对 MSDN 论坛上关于类似问题的问题的回答指出:
如果您使用 Frame.Navigate 导航到同一页面,则不会重新实例化您的 PageA,但将使用新参数调用 OnNavigatedTo 方法。
这样,您可以更改页面上显示的信息(如果需要,甚至可以播放一些过渡);作为额外的奖励,Frame 历史记录确实保留了您以前的 PageA 参数,允许您调用 Frame.GoBack 以返回到以前的 PageA状态。
这是 Prism 设计的,没有参数被传回还是潜在的错误?