Условный шаблон данных - PullRequest
30 голосов
/ 29 января 2012

Вот что я пытаюсь сделать.У меня есть 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 Ответ

49 голосов
/ 29 января 2012

Не устанавливайте 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>
...