检查缓存,Windows 8应用程序中是否存在页面

时间:2013-10-01 10:02:18

标签: c# caching windows-8 frame

有没有办法检查Windows 8应用程序中的页面/帧是否存在于缓存中?假设我有两个页面:Home和Clients(启用导航缓存)。当我从家中导航到客户端(按钮)时,客户端从OnNavigatedTo方法的数据库加载。我导航回Home by Back按钮,然后再回到客户端。现在我看到客户端是从缓存加载的,这很好,但是从OnNavigatedTo方法再次加载。当我第一次打开页面时,我只想从数据库加载一次客户端。稍后只需从缓存加载客户端。

我如何检查客户端之前是否已加载或仅在首页加载时加载它们?也许还有其他方法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

这是一个解决方案......

Sinche没有人想在metro应用程序中从缓存加载,因此最好重置相应帧的缓存大小。对于要从​​缓存加载的页面。只需保持一个if循环。并检查forwardStack对象中的History

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    base.OnNavigatingFrom(e);
    if (e.NavigationMode == NavigationMode.Back)
    {
        ResetPageCache();
    }
}

private void ResetPageCache()
{
    var cacheSize = ((Frame) Parent).CacheSize;
    ((Frame) Parent).CacheSize = 0;
    ((Frame) Parent).CacheSize = cacheSize;
}

这是一个博客。我推荐你首先完成这个:)

BLOG

EDIT ---------------------

这是两个链接。由于我从未面临从先前缓存加载文件的情况,因此我可以分享一些调查结果:)

这是accesscache

Access cache

这里是winJS

winJS cache

如果您为所需的页面将缓存设置为true,则访问缓存可能符合您的要求:)

答案 1 :(得分:1)

好的,我解决了我的问题。重要的是启用NavigationCacheMode。在OnNavigatedTo方法中,我只检查我从数据库保存数据的列表是否包含任何元素。在第一页打开时它是空的,所以我将数据从数据库加载到我的列表。因此,启用NavigationCacheMode时,变量中的数据将存储在缓存中,并在导航到此页面时加载。可能需要一些标志。