无需从BackStack中删除实际页面即可向后导航

时间:2015-02-05 16:26:11

标签: c# xaml windows-phone-8 windows-phone navigationservice

我正在开发一个WP 8应用程序,我遇到导航问题。

我无法找到导航到我的后台堆栈上的页面的方法,而不会丢失我的实际页面状态。

情况如下:

  1. 我在页面A上并导航到页面B,因此后面的堆栈只包含A。
  2. 在页面B上我想导航回到页面A,但页面B保留在后面的堆栈上,所以当我再次访问页面A时,我可以返回页面B保留它的状态。
  3. 所以就是这样:A - > B - > A - > B,这是一个循环,但它不是一个。页面A显示的页面B中显示的项目细节较少,但是从页面B开始,我可以转到页面A查看详细信息,然后再返回。

    这可能看起来很复杂,但我向你保证它很直观:)它在Android和iOS上都是这样的。

    无论如何都要在页面A之前将页面B添加到导航堆栈中,所以当我调用NavigationService.GoBack()时,它会返回到页面A,其前一个状态,然后从A到B执行相同操作。

    提前致谢!!!

2 个答案:

答案 0 :(得分:1)

有几种选择。如果您使用标准MVVM模式,那么您实际上并没有保存“页面状态”(除非您的意思是列表中的滚动位置或选定的文本控件) - 您正在保存数据。当您下次导航到页面B时,该数据将存在。您可以查看this videoMSDN article it points to以获取有关数据绑定的更多信息以及如何将数据存储在将被重新绑定的全局状态中下次导航时到页面。

如果数据绑定无法解决问题,另一个选择是根本不使用不同的页面,而是将A和B作为同一物理页面上的两个不同容器。然后,当您需要切换回容器A时,您可以trap the back button伪造“返回”。

答案 1 :(得分:0)

使用此帮助主题可了解how to preserve and restore page state for Windows Phone 8。导航堆栈只能存储页面URI和少量数据(在URI参数中)。

像这样:

NavigationService.Navigate(new Uri("/SecondPage.xaml?var=value", UriKind.Relative));

SecondPage.xaml,您可以获得val的值。这是detailed example

 if (NavigationContext.QueryString.TryGetValue("val", out msg))