2010-10-19 4 views
0

J'ai un ObservableCollection<Item> et je veux le définir comme la propriété ItemsSource d'un TabControl. La classe Item contient une propriété TabItem qui renvoie un System.Windows.Controls.TabItem. Je veux que le TabControl affiche les TabItem s de la collection.WPF - Liaison TabControl à la propriété TabItem dans une ObserverableCollection

(En réalité, il y a beaucoup de propriétés sur la classe "Item".)

code:

classe Article:

public class Item 
{ 
    public Item(TabItem tabItem) 
    { 
     this.TabItem = tabItem; 
    } 

    public TabItem TabItem { get; private set; } 
} 

TabControl XAML:

<TabControl x:Name="tabControl" /> 

Code behind:

this.tabControl.ItemsSource = new ObservableCollection<Item>() 
{ 
    new Item(new TabItem(){Header = "TabItem 1 Header", Content = "TabItem 1 Content"}), 
    new Item(new TabItem(){Header = "TabItem 2 Header", Content = "TabItem 2 Content"}), 
    new Item(new TabItem(){Header = "TabItem 3 Header", Content = "TabItem 3 Content"}), 
    new Item(new TabItem(){Header = "TabItem 4 Header", Content = "TabItem 4 Content"}), 
    new Item(new TabItem(){Header = "TabItem 5 Header", Content = "TabItem 5 Content"}), 
}; 

J'ai essayé de régler DisplayMemberPath de TabControl sur "TabItem" mais cela n'a pas fonctionné. J'ai été incapable d'obtenir ItemTemplate et ContentTemplate pour afficher réellement le TabItem (je pourrais lier à l'en-tête et au contenu des TabItems respectivement, mais ce n'est pas ce que je veux).

Si j'utilisais un ObservableCollection<TabItem> et mis à ItemsSource il affiche les TabItem s que vous attendez, mais je ne peux pas le faire fonctionner avec cette étape supplémentaire.

Qu'est-ce que je fais mal? Y a-t-il un moyen de faire en sorte que cela fonctionne?

Répondre

0

Je pense que si vous êtes débarrassé de la classe d'objet et venez d'ajouter TabItems, votre code fonctionnerait. En faisant cela, vous limitez ce que vous pouvez faire avec le style des TabItems.

+0

J'ai mentionné à la fin de ma question que cela fonctionne. Mais, j'ai déjà la classe "Item" qui est en fait beaucoup plus complexe que celle utilisée ici, et j'ai besoin de la garder. Donc, je ne peux pas faire ça. – Ashley

+0

Juste lier à la classe d'objet. Le tabcontrol ajoutera automatiquement un tabitem pour chaque élément de votre collection. alors il vous suffit de changer le style tabitem pour lier l'en-tête et le contenu à une propriété de votre classe d'objets. – mdm20

+0

C'est très similaire à ce que j'ai déjà mentionné que j'ai essayé dans la question en utilisant ItemTemplate et ContentTemplate. Malheureusement, de toute façon, je perds toujours les modifications apportées aux TabItems eux-mêmes. Mais, je pense que je vais devoir faire de cette façon de toute façon, et juste ajouter une solution de contournement pour obtenir les changements dont j'ai besoin pour les TabItems. – Ashley

0

Je pense que vous devriez utiliser le style pour définir le contenu. Vous avez ItemContainerStyle ce qui aiderait comme indiqué ici: WPF TabControl Databinding

:)

Questions connexes