UserControl(MainView)があり、その中に別のUserControlを表示する必要があります。条件に応じて、AViewまたはBViewのいずれかが表示されます(どちらもMainViewの同じ場所に表示されます)。私はViewModelの最初のアプローチを使用しているので、ビューはデータテンプレートを介して生成されます。
public class AView : UserControl { }
public class BView : UserControl { }
public class AViewModel : ViewModelBase { }
public class BViewModel : ViewModelBase { }
リソース使用の観点から、これら2つのアプローチには違いがありますか。
1)ContentControlを1つ持つ
<ContentControl Content="{Binding SomeViewModel}" />
private ViewModelBase _someViewModel;
public ViewModelBase SomeViewModel
{
get {return _someViewModel;}
set
{
if (!ReferenceEquals(_someViewModel, value))
{
_someViewModel = value;
RaisePropertyChange(SomeViewModel);
}
}
}
このようにして、SomeViewModelに設定するViewModel(AViewModelまたはBViewModel)を選択でき、DataTemplatesは表示する適切なビューを選択します。
2)2つのContentControlを配置し、それぞれの可視性を制御します(一度に1つだけが表示されます)。
<ContentControl Content="{Binding AViewModel}"
Visibility="{Binding SomeCondition}" />
<ContentControl Content="{Binding BViewModel}"
Visibility="{Binding NotSomeCondition}" />
したがって、リソース管理の観点から、これら2つのビューの切り替えは異なる動作をしますか、それともどちらの場合も、特定の時間に1つのビューのみがメモリに存在しますか?