使用数据模板创建的用户控件存在处置问题



>我有 4 种不同的视图和不同类型的操作。我正在使用日期模板创建视图

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

我有ContentControl,所有ViewModels都绑定到Content属性,比如"ActiveView"

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

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

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

我的问题是:当我更改活动视图时,它会在内容控件中创建新的视图和显示。因此,我遇到了问题。我的旧视图仍在记忆中。如何摧毁它们?

此时,我们无法更改设计。我们处于忍受它的情况。

如果 vm 在字典中,则垃圾回收不会收集它。关于GC何时收集对象有很多规则,我自己偶尔必须在这个话题上刷新自己。全部关于垃圾回收

有一些方法可以强制垃圾回收,但恕我直言,这消除了使用托管代码的好处。一般来说,只要你不坚持对该对象的引用,GC最终应该收集它。您可以强制进行此类收集,但这表明您的设计有问题。

根据MSDN:

"可以通过调用 Collection 来强制垃圾回收,但大多数情况下,应该避免这样做,因为它可能会产生性能问题。

最新更新