Х.Б. ответ хороший, но есть сценарии, в которых он не так хорош.
Если создание представлений (и их базовых моделей представлений) является дорогостоящим, то переключение свойства Content
будет оплачивать эти расходы каждый раз, когда пользователь изменяет представление.
В некоторых сценариях имеет смысл создать оба представления в одном контейнере (например, Grid
) и вместо этого переключать их Visibility
. Если вы используете ленивую оценку в своих моделях представления, дорогостоящие операции не будут выполняться, пока представление не станет видимым, и, что важно, они будут выполняться только в первый раз, когда представление станет видимым. После отображения обоих представлений пользователь может переключаться между представлениями, не восстанавливая модели базовых представлений.
Изменить:
Я исправлен, вроде: ответ Х.Б. не так хорош, как выглядел.
Вы не можете использовать стиль, чтобы установить для свойства Content
ContentControl
значение UIElement
. См. в этом блоге для получения полной информации, но, если кратко, то, если вы используете подход H.B., вы получите ошибку времени выполнения.
Вместо этого вы можете установить свойство ContentTemplate
, например ::
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding ViewMode}"
Value="TreeMode">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<uc:TreeModeView/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ViewMode}"
Value="GridMode">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<uc:GridModeView/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>