在wpf和DataTemplate中使用ContentPresenter时销毁视图

本文关键字:ContentPresenter 视图 wpf DataTemplate | 更新日期: 2023-09-27 18:11:09

我目前使用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,但没有成功。我看到过一些例子,使用信使发送视图的类型,以释放与视图模型相关联的视图,但我不想在我的VM和我的视图之间创建强关系。

谢谢!

在wpf和DataTemplate中使用ContentPresenter时销毁视图

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

private _contentSourceVm;
prop ContentSourceVm
{
  get
   {
     return _contentSourceVm;
   }
  set
   {
     IDisposable disp=_contentSourceVm as IDisposable ;
     if(disp!=null)
     {
      disp.Dispose();
     }
     _contentSourceVm=value;
     OnpropertyChnaged();
   }
}
相关文章:
  • 没有找到相关文章