我在我的应用程序中应用了这个博客描述的缓存,但是我不想在返回时清除页面缓存。
我想要的是,如果用户导航到该页面,检查internet,然后如果internet正在工作,清除缓存并进行服务调用,并再次在缓存中显示和保存数据,如果internet不工作,则显示缓存的数据,而不进行internet调用。分享我的代码,这样你就能清楚地了解我想做什么。
页面加载事件:
void ProfilePage_Loaded(object sender, RoutedEventArgs e)
{
if (Helper.IsConnectedToInternet())
{
ResetPageCache();
GetData();
}
else
{
ContentText.Text = App.GetResource("NoInternetAlert");
AlertMessage.ShowAsync();
}
}当我导航到这个页面之后,我有一个页面可以添加电话号码,导航到这个页面,关闭WIFI并向后导航,它将运行其他代码片段,并且没有显示互联网警报。从总体行为来看,似乎一旦我运行了ResetPageCache(),它就会删除缓存,而不会保存新的数据。我的ResetCacheFunction与博客链接没有什么不同,因为版本上有一些变化,所以在下面粘贴这个函数,但是功能是一样的:
private void ResetPageCache()
{
if (this.Frame == null) { return; }
var cacheSize = this.Frame.CacheSize;
this.Frame.CacheSize = 0;
this.Frame.CacheSize = cacheSize;
}发布于 2015-08-18 08:02:25
从您的描述中,我会认为您忘记编写您的ProfilePage构造函数的折叠代码:
this.NavigationCacheMode = NavigationCacheMode.Required;当您导航回实际页面时,它会缓存它。
发布于 2015-08-18 08:16:12
这不是缓存的问题,在我的getdata()中我是这样做的
if (!defaultViewModel.ContainsKey("ProfileData"))
{
defaultViewModel.Add("ProfileData", ProfileData.Result);
}经过大量调试后,我了解到缓存保存了defaultviewmodel,在进行新的调用之后,它仍然显示了以前的数据,所以我将其更改为
if (!defaultViewModel.ContainsKey("ProfileData"))
{
defaultViewModel.Add("ProfileData", ProfileData.Result);
}
else
{
defaultViewModel.Remove("ProfileData");
defaultViewModel.Add("ProfileData", ProfileData.Result);
}它开始起作用
https://stackoverflow.com/questions/32065809
复制相似问题