2012-01-28 39 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> 

私は条件付き整数の値に応じてmyDataTemplate1またはmyDataTemplate1のいずれかであることをItemTemplateにしたいと思います変数はそれぞれ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

DataTemplateでContentTemplateを設定することが合法であることを認識していませんでしたか?それはどのように機能するのですか? – blue18hutthutt