我正在进行后台下载工作时从一个页面导航到另一个页面。 在第1页中,我根据收到的进度更新进度条。 在导航到第2页之前,我已将 Page1 缓存。
但是当我们导航回 Page1 时,即使我们使用MVVM方法更新了模型并通知了它,View也不会更新。但是W已经验证了进度已完成并且文件已下载。
我们使用以下代码缓存Page。
this.NavigationCacheMode = NavigationCacheMode.Enabled;
我想知道为什么View没有更新,即使我们已经尝试更新它。如果我们未导航到其他页面,则会更新进度。所以我们确信它会在正常情况下工作,除了缓存。
请帮助解决这个问题。
答案 0 :(得分:0)
清除缓存可以帮助您
在您的来电者页面中覆盖以下内容
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
if (e.Uri.ToString().Contains("/target"))
{
Frame parentFrame = (Frame) Parent;
var cacheSize = parentFrame.CacheSize;
parentFrame.CacheSize = 0;
parentFrame.CacheSize = cacheSize;
}
base.OnNavigatingFrom(e);
}
将/target
替换为您想要的网址,或者用您自己的逻辑替换条件,例如。更新视图模型或两者后
背后的想法是看我们navigating
到cached target
的时间,然后我们将框架的cache size
设置为0
,这将有效clear the cache
和然后restore back
原始限制再次开始缓存。
注意此方法仅适用于NavigationCacheMode.Enabled
,但它可能不适用于NavigationCacheMode.Required
,因为它更难以清除。
答案 1 :(得分:0)
最后,我找到了一个解决方案。我发现在导航回来时,只会再次调用PageLoad。所以我在
之后将所有任务保存在PageLoad的Page构造函数中this.InitializeComponent();
结果证明这是我的方案的解决方法。