Примечание : я думаю, что этот метод довольно неуклюжий, но может работать для некоторых сценариев.Я предпочитаю метод использования триггера (от Нейла), который я опубликовал в качестве отдельного ответа.
Другой возможный способ - привязать Content
ContentTemplateSelector
к свойству, которое определяетшаблон, который должен быть выбран.Например, здесь у меня есть две разные панели инструментов, выбранные на основе значения SourceSystem
.Я установил Content
в качестве самого свойства источника системы.
<ContentControl ContentTemplateSelector="{StaticResource toolbarTemplateSelector}"
DataContext="{Binding}" Content="{Binding SourceSystem}" />
Селектор шаблонов просто просматривает исходную систему и возвращает необходимый шаблон.
Если шаблону необходим доступ к текстовому элементу данных элемента управления, просто используйте привязку элемента, чтобы установить его.
<UserControl.Resources>
<DataTemplate x:Key="toolbar1">
<views:OrdersToolbar1View Margin="0,5,0,0"
DataContext="{Binding ElementName=control,Path=DataContext}"/>
</DataTemplate>
<DataTemplate x:Key="toolbar2">
<views:OrdersToolbar2View Margin="0,5,0,0"
DataContext="{Binding ElementName=control,Path=DataContext}"/>
</DataTemplate>
</UserControl.Resources>