WPF:找不到触发器目标'cc'。目标必须出现在任何Setters,Triggers之前

时间:2010-12-17 18:46:57

标签: wpf datatrigger contentcontrol

以下代码有什么问题?

我在编译期间遇到此错误:

属性'TargetName'不代表'Setter'的有效目标,因为找不到名为'cc'的元素。确保在使用目标的任何Setter,Triggers或条件之前声明目标。

如何重构我的代码以便我可以编译它而不会出错?

我只是想用DataTrigger切换一个datatemplate绑定到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 个答案:

答案 0 :(得分:1)

<强>更新

您可以为ContentControl使用Style并从那里更改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>

<强>更新
我不明白为什么DataTemplate中的View不会继承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>

答案 1 :(得分:0)

您不需要整个DataTrigger。

请阅读此内容以使DataTemplateSelector正常工作:

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