条件DataTemplate

时间:2012-01-28 22:30:13

标签: wpf wpf-controls

这是我想要做的。我定义了2个数据模板,它们都引用了不同的用户控件。

<UserControl.Resources>
    <DataTemplate x:Key="myDataTemplate1">
        <Border BorderBrush="Black" BorderThickness="1">
            <myUserControl1 />
        </Border>
    </DataTemplate>
    <DataTemplate x:Key="myDataTemplate2">
            <Border BorderBrush="Black" BorderThickness="1">
                <myUserControl2/>
            </Border>
    </DataTemplate>
</UserControl.Resources>

我正在使用这些数据模板使用ItemsControl显示项目列表,如下所示:

<ItemsControl x:Name="myItemList" ItemTemplate="{StaticResource myDataTemplate1}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate />
    </ItemsControl.ItemsPanel>
</ItemsControl>

我希望ItemTemplate有条件地成为myDataTemplate1或myDataTemplate1,具体取决于整数变量的值分别为1或2。

我应该使用DataTriggers吗?还是有其他方法可以做到这一点?感谢帮助。

1 个答案:

答案 0 :(得分:49)

请勿设置ItemTemplate,而是使用ItemTemplateSelector

当然,

DataTriggers也没关系,为你选择额外的课程。 e.g。

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <ContentControl Content="{Binding}">
            <ContentControl.Style>
                <Style TargetType="ContentControl">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ThatProperty}" Value="1">
                            <Setter Property="ContentTemplate"
                                    Value="{StaticResource myDataTemplate1}" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ThatProperty}" Value="2">
                            <Setter Property="ContentTemplate"
                                    Value="{StaticResource myDataTemplate2}" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>
    </DataTemplate>
</ItemsControl.ItemTemplate>