我目前正在使用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>
谢谢!
答案 0 :(得分:0)
在ViewModel中,在使用新视图模型更改视图模型之前,请先处理当前模型:
private _contentSourceVm;
prop ContentSourceVm
{
get
{
return _contentSourceVm;
}
set
{
IDisposable disp=_contentSourceVm as IDisposable ;
if(disp!=null)
{
disp.Dispose();
}
_contentSourceVm=value;
OnpropertyChnaged();
}
}