如何在Windows Phone 8.1中缓存页面

时间:2014-05-02 11:12:24

标签: c# xaml windows-phone-8 windows-store-apps 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应用程序,因为他们从较长时间开始熟悉它。)

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

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