在带有DataTemplate的wpf中使用ContentPresenter时销毁视图

时间:2015-09-03 07:37:13

标签: c# wpf memory datatemplate

我目前正在使用ContentPresenter在UserControl中显示不同的视图,如下所示:

 <ContentPresenter Content="{Binding ContentSourceVm}"/>

设置为ContentSourceVm的每个值都映射到DataTemplates:

 <DataTemplate DataType="{x:Type adminViewModel:AdminAccountViewModel}">
    <administration:AdminAccountView/>
 </DataTemplate>
 <DataTemplate DataType="{x:Type adminViewModel:AdminCalibrationViewModel}">
    <administration:AdminCalibrationView/>
 </DataTemplate>

当我将新VM设置为ContentSourceVm时,视图已正确更改,但遗憾的是,即使在一定时间后,第一个视图也未被释放。 (不调用前一个视图的析构函数)

管理此操作的最佳做​​法是什么?

我使用DataTemplateSelector寻找解决方案但没有成功。 我已经看到了一些使用messenger发送视图类型的示例,以便在处理此视图模型时释放与视图模型相关联的视图,但我不想在我的VM和View之间建立强关系。 / p>

谢谢!

1 个答案:

答案 0 :(得分:0)

在ViewModel中,在使用新视图模型更改视图模型之前,请先处理当前模型:

private _contentSourceVm;
prop ContentSourceVm
{
  get
   {
     return _contentSourceVm;
   }
  set
   {
     IDisposable disp=_contentSourceVm as IDisposable ;
     if(disp!=null)
     {
      disp.Dispose();
     }
     _contentSourceVm=value;
     OnpropertyChnaged();
   }
}