В вашей ViewModel вы хотите иметь свойство:
private object content;
public object Content
{
get { return content; }
set
{
this.content = value;
OnPropertyChanged("Content");
}
}
Затем в главном окне (или где ваш контент должен быть размещен) добавьте ContentControl:
<ContentControl Content="{Binding Path=Content}"
HorizontalContentAlignment="Left"
VerticalContentAlignment="Center"
Focusable="False"/>
Основной ViewModel будет вести список известных ViewModels (View All, Search) и устанавливать свойство Content для одного из этих ViewModel при соответствующем выполнении команды; команда Add New, вероятно, создаст новый экземпляр AddNewViewModel и установит свойство Content.
В представлении, в котором находится ContentControl, поместите несколько шаблонов данных в ресурсы, отображающие модели представления в соответствующие представления:
<DataTemplate DataType="{x:Type vm:AddNewViewModel}">
<AdornerDecorator>
<views:AddNewView DataContext="{Binding}"/>
</AdornerDecorator>
</DataTemplate>
Это базовый шаблон, который я использую в мастеренад которым я сейчас работаю.