基于触发器的数据模板切换

时间:2011-08-22 11:25:22

标签: wpf

我遇到的问题与此处描述的相同: ContentTemplateSelector is only called one time showing always the same datatemplate

我尝试过与Simon Weaver建议相同的解决方案(尽管他的答案有点缩写,所以我猜它看起来如下):

<ContentControl >
   <Style>
     <Style.Triggers>
    <DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
    <Setter Value="{StaticResource SelectedDataTemplate}" Property="ContentControl.ContentTemplate"></Setter>
     </DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
     <Setter Value="{StaticResource UnSelectedDataTemplate}"  Property="ContentControl.ContentTemplate">
      </Setter>
     </DataTrigger>
     </Style.Triggers>
     </Style>
</ContentControl>

然而,当我运行它时,我只是在我的内容控件中显示'System.Windows.Style'。 顺便说一句,我(有点)使用重写的DataTemplateSelector类使它工作,但问题是选择器只在启动时得到评估。我需要基于数据绑定IsSelected属性的这种切换行为 - 我希望上面的代码段实现。 BTW实际的数据模板本身只包含UI内容 - 没有数据触发等,所以我不在我的帖子中包含它们。

1 个答案:

答案 0 :(得分:4)

您的ContentControl将Content设置为Style,因为您错过了ContentControl.Style代码。

<ContentControl>
    <ContentControl.Style>
        <Style TargetType="{x:Type ContentControl}">
            <Setter Value="{StaticResource UnSelectedDataTemplate}" Property="ContentTemplate" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=IsSelected}" Value="True">
                    <Setter Value="{StaticResource SelectedDataTemplate}" Property="ContentTemplate" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentContro.Style>
</ContentControl>