2009-06-22 10 views
2

J'ai un WPF TabControl que j'ai mis le ItemTemplate aussi bien que le ContentTemplate. Cet onglet affiche les informations du journal des appels en fonction des informations de support technique du client. À l'intérieur de ce même contrôle, j'aimerais également pouvoir afficher un modèle ReturnAuthorization. Je souhaite les échanger en fonction du type d'objet ajouté à la collection Items de TabControl. Est-ce que c'est quelque chose qui est possible?Comment puis-je modifier les éléments et les modèles de contenu en fonction du type d'objet?

J'ai un code pseudo qui montre un peu ce que je veux retirer:

<TabControl x:Name="tabCases" IsSynchronizedWithCurrentItem="True" ItemContainerStyle="{StaticResource ClosableTabItemTemplate}" > 
     <TabControl.ItemTemplate> 
      if (Type is Entities:Case) 
      { 
      <DataTemplate DataType="{x:Type Entities:Case}"> 
        <TextBlock Text="{Binding Path=Id}" /> 
      </DataTemplate> 
      } 
      else if (Type is Entities1:RAMaster) 
      { 
      <DataTemplate DataType="{x:Type Entities1:RAMaster}"> 
       <TextBlock Text="{Binding Path=Id}" /> 
       </DataTemplate> 
      } 
     </TabControl.ItemTemplate> 
     <TabControl.ContentTemplate> 
      <DataTemplate DataType="{x:Type Entities:Case}"> 
       <CallLog:CaseReadOnlyDisplay DataContext="{Binding}" /> 
      </DataTemplate> 
     </TabControl.ContentTemplate> 
    </TabControl> 

Répondre

0

Une façon de faire est d'utiliser quelque chose comme un ItemTemplateSelector, que vous pouvez définir sur le TabControl. Cependant, si vous avez seulement besoin des différents modèles dans le TabControl et savez ce qu'ils sont tous à l'avance, alors vous pouvez juste les laisser automatically être appliqué en utilisant les DataTypes.

<TabControl x:Name="tabCases" IsSynchronizedWithCurrentItem="True" ItemContainerStyle="{StaticResource ClosableTabItemTemplate}" > 
    <TabControl.Resources> 

     <DataTemplate DataType="{x:Type Entities:Case}"> 
       <TextBlock Text="{Binding Path=Id}" /> 
     </DataTemplate> 

     <DataTemplate DataType="{x:Type Entities1:RAMaster}"> 
      <TextBlock Text="{Binding Path=Id}" /> 
     </DataTemplate> 

    </TabControl.Resources> 
    <TabControl.ContentTemplate> 
     <DataTemplate DataType="{x:Type Entities:Case}"> 
      <CallLog:CaseReadOnlyDisplay DataContext="{Binding}" /> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 
+0

Dans ce code, comment wpf sait-il que les DataTemplates spécifiés dans les ressources seront pour ItemTemplate? – CharlesB

Questions connexes