2014-10-09 41 views
0

目前我有一个解决方案与多个ViewModels - “正常”和“嵌套”的。 每次我创建一个新的ViewModel实例时,我都可以在ViewModelManager.ActiveViewModels中看到新的实例。到现在为止还挺好。
不幸的是,我也可以在那里看到“旧”ViewModel实例,实际上,这些实例没有被使用,但仍然保留在这个“缓存”中。

我的第一个问题是现在,我该如何处理这个“旧”ViewModels?
还有一个问题(后续)......这是ViewModel实例化的推荐用法,以避免这种行为?

在此先感谢ActiveViewModels在Catel

回答

0

只要视图模型超出范围,Catel就会自动关闭(并移除)视图模型。我建议您使用最新的预发布版本(v.4.0.0),因为它非常稳定,应该可以解决3.9中的几个问题。

1

好吧,好像我找到了它。 简短说明:
因为我不能使用Catel“DataWindow”,因为我们使用DevExpress WPF(DXWindow),所以ViewModel在卸载视图时似乎不会自动关闭。
我通过在卸载视图时自己关闭ViewModel来解决了问题。剪下的:

private void OnUnloaded(object sender, RoutedEventArgs routedEventArgs) 
{ 
    var dc = DataContext as IViewModel; 
    if (dc != null && !dc.IsClosed) 
    dc.CloseViewModel(null); 
}