2010-01-05 3 views

Répondre

2

Vous n'avez pas spécifié de source pour la liaison. Il utilise donc le DataContext local de l'élément tab. Puisque l'élément tab n'a pas encore de DataContext (c'est ce que vous essayez de définir), sans parler de celui pour lequel le chemin Content.DataContext est significatif, cela ne fonctionnera pas.

Au lieu d'utiliser quelque chose comme: (. En fonction de votre exigence exacte que vous pouvez également enquêter sur l'utilisation Binding.Source au lieu de Binding.RelativeSource)

Binding binding = new Binding("Content.DataContext") 
{ 
    RelativeSource = RelativeSource.Self 
}; 
BindingOperations.SetBinding(tab, DataContextProperty, binding); 

Le paramètre RelativeSource spécifie que la liaison est à le même élément que la cible de liaison plutôt que le DataContext local - ainsi, le DataContext du contrôle est maintenant lié au DataContext du contenu de ce même contrôle, comme requis.

0

Il y a probablement une meilleure façon d'obtenir ce que vous essayez de faire avec des liaisons en XAML, mais si vous utilisez le code derrière de toute façon, vous pouvez essayer ce qui suit à la place:

FrameworkElement fe = tab.Content as FrameworkElement 
if (fe != null) 
    tab.DataContext = fe.DataContext; 

Sans contraignant.

+0

Ne compilera pas. Le contenu est déclaré en tant qu'objet de type et l'objet n'a pas de propriété DataContext. – itowlson

+0

Fixe ........... –

Questions connexes