2012-01-28 42 views
27

這是我想要做的。我定義了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還是有另一種方法來做到這一點?感謝幫助。

回答

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 2012-01-29 06:38:47

+0

@ user1175793:很高興聽到這個消息,如果它足夠回答你的問題,你可以[接受](http://meta.stackexchange.com/questions/5234)它。 – 2012-01-29 13:15:29

+0

我沒有意識到用DataTemplate設置ContentTemplate是合法的嗎?這是如何運作的? – blue18hutthutt 2012-11-06 23:43:00