我想在不重新创建新实例或修改NavigationStack的情况下导航到NavigationStack中的页面。
这可能吗?
例如:
NavigationStack:
Page1.xaml
Page2.xaml
Page3.xaml
现在假设我在Page1.xaml上,并且希望再次导航到Page3.xaml。如果我运行
NavigationService.Navigate(new Uri("/Page3.xaml", UriKind.Relative));
,它会创建另一个Page1对象并导航到那个对象,但我想再次使用现有的页面对象。感谢
调用NavigationService.Navigate()
将创建指定页面的新实例。这就是系统的工作方式。
如果要导航到后堆栈中存在的页面,有两个选项。
-
查询后堆栈并返回到有问题的页面。这样做的后果是,您可能会破坏感知到的后堆栈行为,页面生命周期也可能存在其他需要解决的问题。您还需要以不使用查询字符串的方式在导航到的页面之间进行通信。
-
将页面完全绑定到单例视图模型。即,页面上的所有内容都绑定到视图模型的单个实例。如果您随后导航到该页面的一个新实例(假设导航不会改变/更新VM),它将具有与后堆栈上的任何其他实例相同的数据、配置等。
您的应用程序应该遵循轮辐结构进行导航。做以上任何一项都可能打破用户对预期的看法。如果你做了以上任何一项,请确保与熟悉该平台并了解违反平台惯例的任何后果的用户进行彻底测试。
查看http://mvvmlight.codeplex.com/
每个页面都是在应用程序启动时创建的静态对象