在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和我的视图之间创建强关系。
谢谢!
在ViewModel中,在使用新的视图模型更改视图模型之前,处理当前的视图模型:
private _contentSourceVm;
prop ContentSourceVm
{
get
{
return _contentSourceVm;
}
set
{
IDisposable disp=_contentSourceVm as IDisposable ;
if(disp!=null)
{
disp.Dispose();
}
_contentSourceVm=value;
OnpropertyChnaged();
}
}