Как связать DataContext элемента управления с DataContext его содержимого в WPF? - PullRequest
0 голосов
/ 05 января 2010

Я пробовал это:

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

Это не работает. Я не знаю почему.

Ответы [ 2 ]

2 голосов
/ 05 января 2010

Вы не указали источник для привязки. Поэтому он использует локальный DataContext элемента tab. Поскольку элемент tab еще не имеет DataContext (это то, что вы пытаетесь установить), не говоря уже о том, для которого путь Content.DataContext имеет смысл, это не сработает.

Вместо этого используйте что-то вроде:

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

(В зависимости от ваших точных требований вы также можете захотеть исследовать, используя Binding.Source вместо Binding.RelativeSource.)

Параметр RelativeSource указывает, что привязка к совпадает с элементом привязки , а не с локальным DataContext - таким образом, DataContext элемента управления теперь привязан к DataContext содержимого тот же контроль, как требуется.

0 голосов
/ 05 января 2010

Возможно, есть лучший способ добиться того, что вы пытаетесь сделать с привязками в XAML, но если вы все равно используете код позади, вы можете попробовать следующее:

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

Без привязки.

...