2012-01-28 28 views
27

Đây là những gì tôi đang cố gắng làm. Tôi có 2 Mẫu Dữ liệu được xác định, cả hai đều đề cập đến một điều khiển người dùng khác nhau.Điều kiện 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> 

Tôi đang sử dụng những dữ liệu mẫu có sẵn để hiển thị một danh sách các mục sử dụng ItemsControl như thế này:

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

Tôi muốn ItemTemplate để có điều kiện thể là myDataTemplate1 hoặc myDataTemplate1 tùy thuộc vào giá trị của một số nguyên biến là 1 hoặc 2 tương ứng.

Tôi có nên sử dụng DataTriggers cho việc này hay không còn cách nào khác để thực hiện việc này? Đánh giá cao sự trợ giúp.

Trả lời

42

Không đặt ItemTemplate nhưng sử dụng ItemTemplateSelector.

DataTriggers cũng sẽ ổn, tất nhiên sẽ phụ thuộc bạn vào lớp bổ sung cho công cụ chọn. ví dụ.

<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

Điều đó có hiệu quả. Cảm ơn. – user1175793

+0

@ user1175793: Rất vui khi biết điều đó, nếu nó trả lời đầy đủ câu hỏi của bạn, bạn có thể [chấp nhận] (http://meta.stackexchange.com/questions/5234) nó. –

+0

Tôi đã không nhận ra rằng nó là hợp pháp để thiết lập một ContentTemplate với một DataTemplate? Nó hoạt động như thế nào? – blue18hutthutt

Các vấn đề liên quan