WPF: не удается найти цель триггера 'cc'. Цель должна появляться перед любыми сеттерами, триггерами
Что не так в следующем коде?
Я получаю эту ошибку во время компиляции:
Свойство 'TargetName' не представляет допустимую цель для 'Setter', поскольку элемент с именем 'cc' не найден. Убедитесь, что цель объявлена перед любыми сеттерами, триггерами или условиями, которые ее используют.
Как мне реорганизовать мой код, чтобы я мог скомпилировать его без ошибок?
Я просто хочу переключить табличку данных с DataTrigger, привязанным к значению в моей PersonViewModel!
<ContentControl x:Name="cc" Grid.Column="1">
<DataTemplate>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=CurrentPersonViewModel.IsNew}" Value="True">
<Setter TargetName="cc" Property="ContentTemplate" Value="{DynamicResource NewPersonId}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=CurrentPersonViewModel.IsNew}" Value="False">
<Setter TargetName="cc" Property="ContentTemplate" Value="{DynamicResource SelectedPersonId}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl>
2 ответа
Обновить
Вы можете использовать Стиль для ContentControl и изменить ContentTemplate оттуда
<ContentControl Name="cc" Grid.Column="1">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="ContentTemplate" Value="{DynamicResource SelectedPersonId}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=CurrentPersonViewModel.IsNew}" Value="True">
<Setter Property="ContentTemplate" Value="{DynamicResource NewPersonId}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
ОБНОВИТЬ
Я не понимаю, почему View в DataTemplate не наследует DataContext. Получил работу с помощью этого, но я не могу понять, почему это необходимо
<DataTemplate x:Key="NewPersonId">
<local:NewPersonView DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}, Path=DataContext.CurrentPersonViewModel}" />
</DataTemplate>
<DataTemplate x:Key="SelectedPersonId">
<local:SelectedPersonView DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}, Path=DataContext.SelectedPersonViewModel}"/>
</DataTemplate>
Вам не нужен весь материал DataTrigger.
Просто прочитайте это, чтобы ваш DataTemplateSelector работал правильно: