2015-08-12 1 views
0

J'ai une classe appelée TabViewModel, et il a des propriétés comme le nom, etc ..Comment lier une classe à un TabItem DataContext dans le code-behind

Je dois être en mesure d'ajouter des onglets dynamiquement, et chaque fois qu'un nouvel onglet est ajouté, j'ai besoin de créer une nouvelle instance du TabViewModel et le lier au nouvel onglet.

Voici mon code:

XAML:

  <TabControl.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Name}"/> 
       </DataTemplate> 
      </TabControl.ItemTemplate> 

code derrière: Lors de l'ajout d'un nouvel onglet ..

_tabItems = new List<TabItem>();  
tabItem.DataContext = ViewModel.CreateNewTabViewModel();  
_tabItems.Add(tabItem);  
TabControl1.ItemsSource = _tabItems;  
TabControl1.SelectedIndex = 0; 

Ainsi, CreateNewTabViewModel est supposé créer un nouveau TabViewModel et définir le Nom de la propriété à afficher dans l'en-tête de l'onglet, ce qui explique pourquoi le TextBlock est limité à Name.

J'ai également essayé tabItem.SetBinding mais cela n'a pas fonctionné.

Veuillez nous consulter.

Merci!

Répondre

1
_tabItems = new List<TabItem>();  
//... 
_tabItems.Add(tabItem);  
TabControl1.ItemsSource = _tabItems;  

Remplace la liste complète des éléments d'onglet par une nouvelle liste contenant un seul élément d'onglet. Cela dit, le code n'est pas très clair sur ce qu'il fait, beaucoup semblent inutiles. Cela fonctionne:

var tabItems = new List<TabViewModel>(); 
tabItems.Add(new TabViewModel { Name = "MyFirstTab" }); 
myTabControl.ItemsSource = tabItems; 
myTabControl.SelectedIndex = 0; 

Tout ce que vous devez faire est d'ajouter une instance d'un modèle en vue d'une liste de modèles de vue et point le contrôle onglet pour l'utiliser. Il n'est pas nécessaire de définir le contexte de données; En définissant la source des éléments, vous définissez implicitement le contexte de données de chaque onglet sur un élément de la collection.

+0

Je sais, je ne peux voir qu'un onglet, mais l'en-tête est toujours vide au lieu de définir l'en-tête à la propriété Nom –

+0

@DhinneshJeevan - J'ai ajouté à ma réponse. Le code que vous avez posté n'est pas entièrement clair pour moi, alors j'ai fait quelques suppositions. –