2014-03-04 30 views
0

我该怎么做: 我在场景之间切换。他们中的大多数都绑定了一些视图模型。这个只有1个对象就具有绑定到observableCollection的功能。当我离开时,我想清除收藏夹以确保它在下载时不会显示旧数据或其他内容,而是加载新收藏夹。wp8清除ObservableCollection很慢

我打电话backkeypress后明确的功能,所以它的immediatelly删除:

void PageBackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    App.ViewModel.JobDetail.Clear(); 
} 

JobDetail[0].Remove();JobDetail.RemoveAt(0);但还是同样的效果试了一下: 它还挺冻结,然后20秒的东西后运行。如果我用backkey离开它,它似乎不会对backkey做出反应,然后立即执行我所有的backkey命中(大部分关闭应用程序)。如果我在加载之前尝试清除,我会看到一个空白的白色屏幕,并在相同的20秒后显示场景,然后开始下载(这需要几秒钟的时间)。

我尝试加载的ViewModel包含大约15个字符串和3个短字符串列表(最多5个元素)。 与其他ViewModels我有50个元素,每个有大约10个字符串和相同的3个字符串列表,我离开时没有任何问题来清除列表。

任何想法?

我读过这发生了很多与我使用的VS2013。但是,如果我打开或关闭调试,使用其他模拟器或实际设备,它没有任何区别。同样的问题。

+2

是否有一个原因,你没有为每个页面使用单独的视图模型实例? –

+1

RowlandShaw指出,你真的不应该为所有页面使用静态ViewModel,但它需要大量的重构。尝试'App.ViewModel.JobDetail = new ObservableCollection <..>()',这可能有帮助。 – lisp

+0

这就是我这样做的方式。但是我每次访问它时都想重新加载这个页面。这就是为什么我在进入或离开时试图删除视图模型的原因。 随着其他页面的尝试,每当内容发生变化时我都会做同样的事情:我在按下backkey后删除并在下一次再次输入时加载。作品完美无瑕。这里需要20秒,而这只是一个元素。这可能是原因吗?因为我删除了元素[0],它释放了整个viewmodel的内存或其他内容? – ecth

回答

0

好了,解决办法很简单:

void PageBackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    DataContext = null; 
    App.ViewModel.JobDetail.Clear(); // delete previous search 
} 

在其他类我没有设置的DataContext为null,但不知何故,它完美。在这个类中删除绑定的数据会产生巨大的性能问题。就像我说大约20秒延迟,而通常一切都很好,很快。

希望它能帮助未来的其他人:)