以下代码有什么问题?
我在编译期间遇到此错误:
属性'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>
答案 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正常工作: