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?
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
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
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