如何在Windows Phone 8.1中缓存页面

4

在之前的 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 应用程序,因为它们从更长的时间开始就与此类似)。


你应该看一下这个问题(当将缓存模式设置为required时,可能会出现问题):https://dev59.com/kGgu5IYBdhLWcg3wJT5I - Rico Suter
感谢 @RicoSuter 的提及。 - user3293835
2个回答

6
在您的页面构造函数中,您需要指定:
    public MainPage()
    {
       this.InitializeComponent();
       this.NavigationCacheMode = NavigationCacheMode.Required;
    }

0
在 App.cs 中,您可以设置 RootFrame.CacheSize,这会提示操作系统尝试保留多少页面在缓存中。此外,您可能不应该在 NavigationHelper_LoadState 中重置数据上下文 - 即使您返回导航到该页面,也会调用此方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接