【问题标题】:Conditional DataTemplate条件数据模板
【发布时间】:2012-01-28 22:30:12
【问题描述】:

这就是我想要做的。我定义了 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 还是有其他方法可以做到这一点?感谢您的帮助。

【问题讨论】:

    标签: wpf wpf-controls


    【解决方案1】:

    不要设置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>
    

    【讨论】:

    • @user1175793:很高兴听到这个消息,如果它充分回答了你的问题,你可以accept它。
    • 我没有意识到使用 DataTemplate 设置 ContentTemplate 是合法的?它是如何工作的?
    • @blue18hutthutt: ContentTemplate 只是一个可以有任何类型的属性,在这种情况下,类型是DataTemplate,在the documentation 中也可以看到。不要与ControlTemplate 混淆,ControlTemplate 也是一种与Template 属性一起使用的模板。还有类似的属性:ContentControl->ContentTemplate & ItemsControl->ItemTemplate.
    • 这就是混乱的根源:) 想一想……这也解释了过去的许多其他混乱!
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    相关资源
    最近更新 更多