2012-01-28 4 views
27

Вот что я пытаюсь сделать. У меня есть 2 шаблона данных, которые относятся к другому пользовательскому элементу управления.Условный DataTemplate

<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 для этого или есть другой способ сделать это? Цените помощь.

ответ

42

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

Это сработало. Благодарю. – user1175793

+0

@ user1175793: Рад это слышать, если он достаточно ответил на ваш вопрос, вы могли бы [принять] (http://meta.stackexchange.com/questions/5234) его. –

+0

Я не понял, что было законно устанавливать ContentTemplate с помощью DataTemplate? Как это работает? – blue18hutthutt

Смежные вопросы