我可以获得Silverlight Navigation框架来清除其缓存吗?

时间:2010-03-03 03:39:28

标签: .net silverlight silverlight-3.0

基本上,我使用的是“View-first”样式的MVVM连接 - 意味着视图实例化了viewmodel(好吧,它从服务定位器抓取它,它使用一个统一容器来解决它,但无论如何)。这在大多数情况下运行良好 - 导航框架范例似乎与视图优先方法一起使用,因为查询字符串被映射到视图。

在某些情况下,我希望页面能够在导航上重新创建,这意味着我希望它能够从缓存中清除。我还没有找到一个很好的方法来做到这一点。

我正在考虑的是让页面监听合适的事件并将其NavigationCacheMode设置为“禁用”,但我宁愿能够在中心位置定义此行为 - 就像我的应用程序控制器一样。

2 个答案:

答案 0 :(得分:1)

这听起来并不适用于您的情况,但我想发布我找到的解决方案,我需要做什么。在我的应用程序中,我需要在用户注销时清除整个缓存。我希望所有历史记录都消失,而不仅仅是某个页面。

我的解决方案是通过更改大小来创建一个清除缓存的方法:

public static void ClearCache()
{
    int size = frame.CacheSize;
    frame.CacheSize = 0;
    frame.CacheSize = size;
}

然后我在导航回登录页面后调用此

PageConductor.Navigate("/Login");
PageConductor.ClearCache();

如果页面具有NavigationCacheMode =“Enabled”,则此方法有效。它不适用于必需设置。

答案 1 :(得分:0)

由于没有人回答我想分享我的最终解决方案。我能让它工作的最简单方法是通过附加行为来监听“clearCache”事件。当事件触发时,该行为将启用的页面缓存设置为false,并且该页面将从缓存中清除。

有许多方法可以让行为侦听事件。最简单的通常是简单地将某种事件提供者传递给XAML中的行为,如果可以通过应用程序资源访问该提供者。