2010-04-17 7 views
0

J'ai créé CustomTabItem qui hérite de TabItem et je voudrais l'utiliser tout en se liant ObservableCollection dans TabControlsur mesure TabItem dans TabControl

<TabControl ItemsSource="{Binding MyObservableCollection}"/> 

Il est comme ça en XAML, mais je ne sais pas comment le changement type par défaut de l'élément de sortie créé par TabControl lors de la liaison.

J'ai essayé de créer convertisseur, mais il doit faire quelque chose comme cette méthode à l'intérieur de convertin:

List<CustomTabItem> resultList = new List<CustomTabItem>(); 

Et itérer mon ObservableCollection d'entrée, créer mon CustomTab basé sur l'article de la collection et l'ajouter à Je souhaite l'éviter, car lors de la création de CustomTabItem je crée un View complexe et cela prend du temps, donc je ne veux pas le créer toujours quand quelque chose change dans la collection liée.

Ma classe étend TabItem typique et je voudrais utiliser cette classe dans TabControl au lieu de TabItem.

 <TabControl.ItemContainerStyle> 
      <Style TargetType="{x:Type local:CustomTabItem}"> 
       <Setter Property="MyProperty" Value="{Binding xxx}"/> 
      </Style> 
     </TabControl.ItemContainerStyle> 

Le code ci-dessus génère une erreur indiquant que Style ne peut pas être appliqué à TabItem.

Mon but principal est d'utiliser en XAML mes propres propriétés CustomTabItem et se lient ... Tout comme ci-dessus ...

J'ai aussi essayé d'utiliser

<TabControl.ItemTemplate/> 
<TabControl.ContentTemaplte/> 

Mais ils ne sont que des styles pour TabItem, il me manquera toujours les propriétés que j'ai ajoutées dans ma classe personnalisée.

Répondre

4

Vous devez créer une classe personnalisée dérivée de TabControl et passer outre GetItemForContainerOverride retourner votre TabItem personnalisé:

protected override DependencyObject GetContainerForItemOverride() 
{ 
    return new CustomTabItem(); 
} 
Questions connexes