条件DataTemplate

use*_*793 30 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>
Run Code Online (Sandbox Code Playgroud)

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

<ItemsControl x:Name="myItemList" ItemTemplate="{StaticResource myDataTemplate1}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate />
    </ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

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

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

H.B*_*.B. 49

不要设置ItemTemplate但是使用ItemTemplateSelector.

DataTriggers当然也没关系,为你选择额外的课程.例如

<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>
Run Code Online (Sandbox Code Playgroud)

  • @blue18hutthutt:“ContentTemplate”只是一个可以具有任何类型的属性,在本例中,类型是“DataTemplate”,如[文档](http://msdn.microsoft.com/en-us/library)中所示/system.windows.controls.contentcontrol.contenttemplate.aspx)也是如此。不要与“ControlTemplate”混淆,“ControlTemplate”也是一种与[“Template”](http://msdn.microsoft.com/en-us/library/system.windows.controls.control)一起使用的模板类型。 template.aspx) 属性。还有类似的属性:“ContentControl”-&gt;“ContentTemplate”和“ItemsControl”-&gt;“ItemTemplate”。 (2认同)