如何使用数据触发器应用数据模板样式



我试图应用基于绑定值的ContentTemplate。问题是,它不工作。

我有一个默认模板,名为TemplateA,然后我想显示基于绑定值的样式-是TemplateA或TemplateB。

如果我注释掉Default模板,两个模板都不会被选中。

我已经检查了我的绑定值,值是ok的。

你能看出我错在哪里吗?

ListDataView

<CollectionViewSource x:Key="ListDataView" />

它位于窗口的资源部分,ListDataView被附加到代码中的ObservableCollection。

<DataTemplate x:Key="TemplateA">
    <TextBlock Text="Template A" />
</DataTemplate>
<DataTemplate x:Key="TemplateB">
    <TextBlock Text="Template B" />
</DataTemplate>
    <ContentControl x:Name="LISTINGCONTROLA">
    <ContentControl.Style>
        <Style TargetType="{x:Type ContentControl}">
            <Setter Property="ContentTemplate" Value="{StaticResource TemplateA}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Source={StaticResource ListDataView}, Path=ListType}" Value="TEMPLATEA">
                    <Setter Property="ContentTemplate" Value="{StaticResource TemplateA}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Source={StaticResource ListDataView}, Path=ListType}" Value="TEMPLATEB">
                    <Setter Property="ContentTemplate" Value="{StaticResource TemplateB}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>

使用WPF DataTemplateSelector可能会有所帮助http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector

问题很可能是因为您的绑定指向CollectionViewSource本身的属性,而该类没有名为ListType的属性,因此没有值可以绑定(因此总是使用默认值)。

您试图绑定到的ListType属性在哪里?

最新更新