使用什么绑定将DataGridTemplateColumn的单元格模板中定义的元素绑定到该单元格的DataGridRow的绑定数据项?
例如,假设DataGrid Items是具有Name属性的对象。下面的代码中需要什么绑定才能将TextBlock Text绑定到父行所代表的数据项的“Name”属性?
(是的,在示例中我可以使用DataGridTextColumn,但我只是为了简化而简化。)
<DataGrid ItemsSource="{Binding Items}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ???}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:4)
您不需要任何特殊类型的绑定 - TextBlock继承行中的datacontext(设置为绑定项)。
所以你可以这样做:
<TextBlock Text="{Binding Name}" />
要查看datacontext实际上是由TextBlock继承的,您可以设置一个更接近控件层次结构中TextBlock的不同datacontext。 TextBlock现在将使用该datacontext。
在此示例中,StackPanel的名称将显示在TextBlock中,而不是DataGrid上绑定行对象上的名称:
<DataTemplate>
<StackPanel x:Name="panel1" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<!-- Binds to Name on the Stackpanel -->
<TextBlock Text="{Binding Name}" />
<!-- Binds to Name on object bound to DataGridRow -->
<TextBlock Text="{Binding DataContext.Name,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}}" />
</StackPanel>
</DataTemplate>