Для такого рода задач вы обычно используете ContentControl
.Свяжите свойство Content
элемента управления со свойством вашей ViewModel (например, CurrentViewModel
) и определите DataTemplates
в ресурсах для каждого типа ViewModel, которые могут отображаться в ContentControl
.Когда вы назначаете ViewModel для CurrentViewModel
, ContentControl
выберет соответствующий DataTemplate
для содержимого.
Main ViewModel
private object _currentViewModel;
public object CurrentViewModel
{
get { return _currentViewModel; }
set
{
if (value != _currentViewModel)
{
_currentViewModel = value;
OnPropertyChanged("CurrentViewModel");
}
}
}
App.xaml
<Application.Resources>
<DataTemplate DataType="{x:Type vm:AddItemViewModel}">
<v:AddItemView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:FooViewModel}">
<v:FooView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:BarViewModel}">
<v:BarView />
</DataTemplate>
...
</Application.Resources>
Главный вид
...
<ContentControl Content="{Binding CurrentViewModel}" />
...
В вашем случае в команде для кнопки «Добавить элемент» вы назначаетеэкземпляр от AddItemViewModel
до CurrentViewModel