如何在导航到另一个页面后从异步任务更新缓存页面?

时间:2014-06-26 12:20:58

标签: c# wpf mvvm

我正在进行后台下载工作时从一个页面导航到另一个页面。 在第1页中,我根据收到的进度更新进度条。 在导航到第2页之前,我已将 Page1 缓存。

但是当我们导航回 Page1 时,即使我们使用MVVM方法更新了模型并通知了它,View也不会更新。但是W已经验证了进度已完成并且文件已下载。

我们使用以下代码缓存Page。

this.NavigationCacheMode = NavigationCacheMode.Enabled;

我想知道为什么View没有更新,即使我们已经尝试更新它。如果我们未导航到其他页面,则会更新进度。所以我们确信它会在正常情况下工作,除了缓存。

请帮助解决这个问题。

2 个答案:

答案 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替换为您想要的网址,或者用您自己的逻辑替换条件,例如。更新视图模型或两者后

背后的想法是看我们navigatingcached target的时间,然后我们将框架的cache size设置为0,这将有效clear the cache和然后restore back原始限制再次开始缓存。

注意此方法仅适用于NavigationCacheMode.Enabled,但它可能不适用于NavigationCacheMode.Required,因为它更难以清除。

答案 1 :(得分:0)

最后,我找到了一个解决方案。我发现在导航回来时,只会再次调用PageLoad。所以我在

之后将所有任务保存在PageLoad的Page构造函数中

this.InitializeComponent();

结果证明这是我的方案的解决方法。