使用DataTemplate创建的UserControl存在处置问题

时间:2013-10-31 13:01:09

标签: c# wpf datatemplate

我有4种不同的视图,有不同的操作。我正在使用DateTemplate来创建视图

<DateTemplate DateType={X:Type HomeViewModel}" >
     <HomeView>
</DateTemplate>
<DateTemplate DateType={X:Type DeviceDateViewModel}" >
     <DeviceDateView>
</DateTemplate>

我有ContentControl,所有ViewModel都绑定到Content属性,比如说“ActiveView”

我创建了所有ViewModel并保存在字典中。当我想要更改视图时,我只是将ActiveView分配给我想要显示的新视图。

void ActiveteView(ViewType viewType)
{
    ActiveView = GetViewFromDictionary(viewType);
}

我们的一个控件不支持DataBinding,所以我在View的后面代码中创建了一些新的控件。

我的问题是:当我更改ActiveView时,它会在ContentControl中创建新的View和display。因此,我遇到了问题。我的旧视图仍在记忆中。如何摧毁他们?

此时,我们无法改变设计。我们处于这样的境地。

1 个答案:

答案 0 :(得分:0)

如果vm在字典中,那么垃圾收集将不会收集它。关于GC什么时候收集一个对象有很多规则,我自己必须偶尔刷新自己的话题。 All about Garbage collection

有很多方法可以强制进行垃圾收集,但恕我直言可以避免使用managed code的好处。一般来说,只要你不坚持对该对象的引用,GC最终应该收集它。您可以强制进行此类收集,但这表明您的设计存在问题。

根据MSDN:

  

“可以通过调用Collect强制进行垃圾回收,但大部分时间都应该避免这种情况,因为它可能会产生性能问题。”