Последний ответ (от VinceF) работал и для меня.
Я хотел показать usercontrol в зависимости от значения свойства в моей viewmodel. Поэтому я сделал ContentControl с некоторыми триггерами стиля. В зависимости от значения свойства привязки триггер устанавливает конкретный шаблон содержимого, содержащий определенный пользовательский контроль.
Пользовательский контроль показывался правильно, но его DataContext всегда был нулевым. Поэтому мне пришлось установить Context of ContentControl на: Content="{Binding}"
После этого UserControls работали нормально и имели тот же DataContext, что и их родительский элемент.
Итак, мой XAML выглядит так:
В части «Ресурсы» я определил два DataTemplates; каждый для каждого UserControl, который я хочу показать.
<DataTemplate x:Key="ViewA">
<namespace:UserControlA/>
</DataTemplate>
<DataTemplate x:Key="ViewB">
<namespace:UserControlB/>
</DataTemplate>
Часть, в которой я показываю UserControl в зависимости от свойства, выглядит следующим образом:
<ContentControl Content="{Binding}">
<ContentControl.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Property}" Value="0">
<Setter Property="ContentControl.ContentTemplate" Value="{StaticResource ViewA}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Property}" Value="1">
<Setter Property="ContentControl.ContentTemplate" Value="{StaticResource ViewB}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>