1

我想在不重新创建新实例或修改 NavigationStack 的情况下导航到 NavigationStack 中的页面。

这可能吗?

例如:

NavigationStack: 
    Page1.xaml
    Page2.xaml
    Page3.xaml

现在假设我在 Page1.xaml 上,并且想要再次导航到 Page3.xaml。如果我跑

NavigationService.Navigate(new Uri("/Page3.xaml", UriKind.Relative));
它创建另一个 Page1 对象并导航到该对象,但我想再次使用现有的页面对象。

谢谢

4

2 回答 2

2

调用NavigationService.Navigate()将创建指定页面的新实例。这就是系统的工作方式。

如果要导航到后堆栈中存在的页面,有两个选项。

  1. 查询回栈并返回有问题的页面。这样做的后果是您可能会破坏感知到的回栈行为,并且页面生命周期也可能存在您需要解决的其他问题。您还需要以不使用查询字符串的方式在您导航到的页面之间进行通信。

  2. 将页面完全绑定到单例视图模型。即页面上的所有内容都绑定到视图模型的单个实例。如果您随后导航到该页面的新实例(假设导航不会更改/更新 VM),它将具有与后端堆栈上的任何其他实例相同的数据、配置等。

您的应用程序应遵循中心辐射结构进行导航。执行上述任一操作都可能会破坏用户对预期内容的看法。如果您执行上述任何操作,请务必与熟悉平台并了解违反平台约定的任何后果的用户进行彻底测试。

于 2012-12-13T13:05:10.103 回答
1

看看http://mvvmlight.codeplex.com/

每个页面都是在应用程序启动时创建的静态对象

于 2012-12-14T06:21:09.550 回答