将DependencyProperty设置为应用程序资源会导致内存泄漏

时间:2013-04-10 09:32:00

标签: wpf dependency-properties

我有一个自定义UserControl(MyView),它包含一个名为Header的DependencyProperty。此UserControl是其他几个UserControls(视图)的一部分。它通过DataTemplate

解决
<!-- SomeView's resources -->
<DataTemplate DataType="{x:Type vm:MyViewModel">
  <vw:MyView Header="{StaticResource myViewHeader}" />
</DataTemplate>

包含MyView的一些视图正在为MyView的Header传递相同的资源。出于这个原因,我将myvIewHeader放在全局可用资源(应用程序资源)中。

让资源全局可用会导致内存泄漏,因为MyView永远不会被垃圾收集。

但是,如果我将Header资源放在容器(ex SomeView的)资源中,那么所有内容都会得到适当的清理。

为了在使用Header的全局可用资源时MyView不会导致内存泄漏,我需要在MyView的Unloaded事件中将Header设置为null:

this.Unloaded += (s, e) =>
  {
    this.SetValue(HeaderProperty, null);
  };

我的问题是:为什么这种情况发生了,我正在做正确,或者我应该在某些其他中实现这一点(更好的方式?

0 个答案:

没有答案