如何在WPF中的DataTemplate中访问根DataContext?

时间:2009-03-10 15:23:38

标签: wpf data-binding binding

我有一个使用数据绑定填充的项目网格。 在网格中,我对某些单元格有DataTemplate。我需要访问根元素的DataContext(托管网格的元素),以便我可以访问其他绑定来支持我的datatemplate。

所以你有:

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

我希望{Binding Supports}上的TheDataSourceWithItemsAndSupports,但我不知道该怎么做。我尝试指定{Binding},但始终返回null。我也尝试使用RelativeSource FindAncestor,但也会产生null

任何线索?

4 个答案:

答案 0 :(得分:14)

也许试试

Window Name="TheWindow"
...
ListBox.ItemsSource = {Binding DataContext.Supports, ElementName=TheWindow}

答案 1 :(得分:0)

它应该按照你描述的方式工作。我只看到你的DataTemplate不是ItemTemplate。您还应该查看输出窗口以查看绑定失败的位置。

答案 2 :(得分:0)

我的解决方案是通过实现This field

来公开整个DataContext类
get
{
    return this;
}

然后绑定到它。

答案 3 :(得分:0)

绑定到根上下文的另一个小技巧

<ListBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}, AncestorLevel=1}, Path=DataContext.Supports}"/>