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 работал правильно:

http://joshsmithonwpf.wordpress.com/2007/03/18/updating-the-ui-when-binding-directly-to-business-objects-that-are-modified/

Другие вопросы по тегам