Ответ HB хорош, но есть сценарии, в которых он не так хорош.
Если создание представлений (и лежащих в их основе моделей представлений) обходится дорого, то переключение свойства Content
будет оплачивать эти расходы каждый раз, когда пользователь изменяет представление.
В некоторых сценариях имеет смысл создать оба представления в одном контейнере (например, Grid
) и вместо этого переключать их Visibility
. Если вы используете ленивую оценку в своих моделях представления, ресурсоемкие операции не будут выполняться до тех пор, пока представление не станет видимым, и, что важно, они будут выполняться только в первый раз, когда представление становится видимым. После отображения обоих представлений пользователь может переключаться между представлениями, не реконструируя лежащие в их основе модели представлений.
Изменить:
Я исправляюсь, вроде как: ответ Х.Б. не так хорош, как выглядел.
Вы не можете использовать стиль, чтобы установить для свойства Content
объекта ContentControl
значение UIElement
. См. этот блог. post для получения полной информации, но вкратце это то, что если вы используете подход HB, вы получите ошибку времени выполнения.
Вместо этого вы можете установить свойство 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>
person
Robert Rossney
schedule
01.07.2011