WPF: не удается найти цель триггера 'cc'.Цель должна появляться перед любыми сеттерами, триггерами - PullRequest
1 голос
/ 17 декабря 2010

что не так в следующем коде?

Я получаю эту ошибку во время компиляции:

Свойство '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 ]

1 голос
/ 17 декабря 2010

Обновление

Вы можете использовать стиль для 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>

UPDATE
Я не понимаю, почему 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>
0 голосов
/ 20 декабря 2010

Вам не нужен весь материал DataTrigger.

Просто прочитайте это, чтобы ваш DataTemplateSelector работал правильно:

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

...