我有一个使用数据绑定填充的项目网格。
在网格中,我对某些单元格有DataTemplate
。我需要访问根元素的DataContext
(托管网格的元素),以便我可以访问其他绑定来支持我的datatemplate。
所以你有:
Window
Window.DataContext = TheDataSourceWithItemsAndSupports
DataGrid.ItemsSource = {Binding Items}
DataTemplate
ListBox.ItemsSource = {Binding Supports}
我希望{Binding Supports}
上的TheDataSourceWithItemsAndSupports
,但我不知道该怎么做。我尝试指定{Binding}
,但始终返回null
。我也尝试使用RelativeSource FindAncestor
,但也会产生null
。
任何线索?
答案 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}"/>