4

什么绑定用于将 DataGridTemplateColumn 的单元格模板中定义的元素绑定到该单元格的 DataGridRow 的绑定数据项?

例如,假设 DataGrid 项是具有 Name 属性的对象。下面的代码中需要什么绑定才能将 TextBlock 文本绑定到父行表示的数据项的“名称”属性?

(是的,在示例中我可以只使用 DataGridTextColumn,但我只是为了简化示例。)

<DataGrid ItemsSource="{Binding Items}">
  <DataGrid.Columns>
    <DataGridTemplateColumn Header="Name">
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding ???}"/>
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
  </DataGrid.Columns>
</DataGrid>
4

1 回答 1

4

您不需要任何特殊类型的绑定 - TextBlock 从行(设置为绑定项)继承数据上下文。

所以你可以这样做:

<TextBlock Text="{Binding Name}" />

要查看数据上下文实际上是由 TextBlock 继承的,您可以在控件层次结构中设置更接近 TextBlock 的不同数据上下文。TextBlock 现在将使用该数据上下文。

在此示例中,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>
于 2012-11-02T20:20:29.447 回答