Как я могу получить доступ к корневому DataContext в DataTemplate в WPF? - PullRequest
8 голосов
/ 10 марта 2009

У меня есть сетка элементов, которая заполняется с помощью привязки данных. В сетке у меня есть DataTemplate для определенных ячеек. Мне нужно получить доступ к DataContext корневого элемента (того, который содержит сетку), чтобы я мог получить доступ к дополнительным привязкам для поддержки моей таблицы данных.

Итак, у вас есть:

Window
    Window.DataContext = TheDataSourceWithItemsAndSupports
    DataGrid.ItemsSource = {Binding Items}
        DataTemplate
            ListBox.ItemsSource = {Binding Supports}

Я хочу {Binding Supports} на TheDataSourceWithItemsAndSupports, но я не понимаю, как это сделать. Я попытался указать {Binding}, но это всегда возвращает null. Я также попытался использовать RelativeSource FindAncestor, но это также дает null.

Есть какие-нибудь подсказки?

Ответы [ 4 ]

14 голосов
/ 10 марта 2009

Может быть попробовать

Window Name="TheWindow"
...
ListBox.ItemsSource = {Binding DataContext.Supports, ElementName=TheWindow}
0 голосов
/ 18 июля 2018

Еще один маленький трюк для привязки к корневому контексту

<ListBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}, AncestorLevel=1}, Path=DataContext.Supports}"/>
0 голосов
/ 21 июня 2014

Мое решение состояло в том, чтобы представить весь класс DataContext путем реализации этого поля

get
{
    return this;
}

и затем привязка к нему.

0 голосов
/ 10 марта 2009

Это должно работать так, как вы описываете. Я вижу, что ваш DataTemplate не является ItemTemplate. Вам также следует взглянуть на окно вывода, чтобы увидеть, где сбой привязок.

...