Windows Phone导航

时间:2012-12-13 12:40:43

标签: navigation windows-phone-7.1 windows-phone windows-phone-8

我想导航到NavigationStack中的页面,而无需重新创建新实例或修改NavigationStack。

这可能吗?

例如:

NavigationStack: 
    Page1.xaml
    Page2.xaml
    Page3.xaml

现在假设我在Page1.xaml上,并希望再次导航到Page3.xaml。 如果我运行

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

由于

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:1)

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

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