如何在Windows Phone 8.1中缓存页面

以前在Windows Phone 8.0应用程序中,我们可以通过这种方式更深入地浏览同一页面:

 NavigationService.Navigate(new Uri("/SamePage.xaml", UriKind.Relative)); 

页面已自动缓存,因此在导航回来后,用户离开时列表上的位置相同。

但在Windows Phone Store Apps我们通过这种方式更深入地浏览同一页面:

 Frame.Navigate(typeof(SamePage), id); 

但在导航回来之后它会再次加载数据,所以如果用户位于长列表的中间位置,那么现在他位于顶部:

 private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e) { // TODO: Create an appropriate data model for your problem domain to replace the sample data. var group = await SampleDataSource.GetGroupAsync((string)e.NavigationParameter); this.DefaultViewModel["Group"] = group; } 

如何像以前那样缓存页面,这样用户将在他离开的列表中的相同位置?

(我也包括Windows应用程序,因为他们从较长时间开始熟悉它)。

在您的页面构造函数中,您必须指定

  public MainPage() { this.InitializeComponent(); this.NavigationCacheMode = NavigationCacheMode.Required; } 

在App.cs中,您可以设置RootFrame.CacheSize,它提示操作系统应该尝试在缓存中保留多少页面。 此外,您可能不应在NavigationHelper_LoadState中重置datacontext – 每次导航到该页面时都会调用此方法,即使您向后导航也是如此。