我有一个 UserControl (MainView),它需要在其内部显示另一个 UserControl。根据某些情况,它将显示 AView 或 BView(它们都出现在 MainView 的同一位置)。我使用的是 ViewModel 第一种方法,因此视图是通过数据模板生成的:
public class AView : UserControl { }
public class BView : UserControl { }
public class AViewModel : ViewModelBase { }
public class BViewModel : ViewModelBase { }
从资源使用角度来看,这两种方式是否有区别:
1) 拥有一个 ContentControl
<ContentControl Content="{Binding SomeViewModel}" />
private ViewModelBase _someViewModel;
public ViewModelBase SomeViewModel
{
get {return _someViewModel;}
set
{
if (!ReferenceEquals(_someViewModel, value))
{
_someViewModel = value;
RaisePropertyChange(SomeViewModel);
}
}
}
这样,我可以选择将哪个 ViewModel(AViewModel 或 BViewModel)设置为 SomeViewModel,而 DataTemplates 将选择要显示的适当视图。
2)放置两个ContentControl,并控制它们中的每一个的Visibility(一次只有一个可见)。
<ContentControl Content="{Binding AViewModel}"
Visibility="{Binding SomeCondition}" />
<ContentControl Content="{Binding BViewModel}"
Visibility="{Binding NotSomeCondition}" />
那么,从资源管理的角度来看,这两个视图之间的切换行为是否会有所不同,或者在这两种情况下,在给定时间只有一个视图会驻留在内存中?