1

以下代码有什么问题?

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

属性“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>
4

2 回答 2

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 中的视图不继承 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>
于 2010-12-17T20:05:10.267 回答
0

您不需要整个 DataTrigger 的东西。

只需阅读此内容即可使您的 DataTemplateSelector 正常工作:

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

于 2010-12-20T08:39:43.143 回答