2012-01-28 13 views
27

Esto es lo que estoy tratando de hacer. Tengo 2 plantillas de datos definidas que se refieren a un control de usuario diferente.Conditional 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> 

estoy usando estas plantillas de datos para mostrar una lista de elementos que utilizan ItemsControl como esto:

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

Me gustaría que el ItemTemplate ser condicionalmente ya sea myDataTemplate1 o myDataTemplate1 dependiendo del valor de un número entero variable siendo 1 o 2 respectivamente.

¿Debo usar DataTriggers para esto o hay otra forma de hacerlo? Apreciar la ayuda.

Respuesta

42

No configure el ItemTemplate pero utilice un ItemTemplateSelector.

DataTriggers estaría bien también, por supuesto, le ahorra la clase extra para el selector. p.ej.

<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

Eso funcionó. Gracias. – user1175793

+0

@ user1175793: Me alegra saber que, si ha respondido suficientemente a su pregunta, puede [aceptar] (http://meta.stackexchange.com/questions/5234). –

+0

No me di cuenta de que era legal establecer ContentTemplate con DataTemplate? ¿Cómo funciona? – blue18hutthutt