What I've done in this situation is to use a tabcontrol with hidden tabs. As a user makes a 'view' selection, the SelectedIndex of the TabControl is changed and a different view is displayed.
For example, the following code has the ability to display 3 different views:
First let's declare the 'hidden' tab control style:
Code:
<Window.Resources>
<Style x:Key="HiddenTabItemStyle" TargetType="{x:Type TabItem}">
<Setter Property="Visibility" Value="Hidden"/>
<Setter Property="Margin" Value="0"/>
</Style>
<Style x:Key="HiddenTabStyle" TargetType="{x:Type TabControl}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Margin" Value="0,-15,0,0"/>
</Style>
</Window.Resources>
Next use the tabstyles in a tabcontrol that contains 3 different views
Code:
<TabControl x:Name="_viewContainer"
SelectedIndex="{Binding Path=ViewModeId}"
Background="Transparent"
Style="{StaticResource HiddenTabStyle}" BorderBrush="Transparent" >
<TabItem Background="Transparent" Style="{StaticResource HiddenTabItemStyle}">
<acc:AutomaticView x:Name="_automaticView" />
</TabItem>
<TabItem Background="Transparent" Style="{StaticResource HiddenTabItemStyle}">
<acc:EditView x:Name="_editView" />
</TabItem>
<TabItem Background="Transparent" Style="{StaticResource HiddenTabItemStyle}">
<acc:ManualView x:Name="_manualView" />
</TabItem>
</TabControl>
In the above code, when the ViewModeId property changes, the new view gets loaded.