4

DataGridTemplateColumnのセルテンプレートで定義された要素をそのセルのDataGridRowのバインドされたデータ項目にバインドするために使用されるバインドは何ですか?

たとえば、DataGridアイテムがNameプロパティを持つオブジェクトであると想定します。TextBlockテキストを親行で表されるデータ項目の「Name」プロパティにバインドするには、以下のコードでどのようなバインドが必要ですか?

(はい、この例では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の名前が、DataGridのバインドされた行オブジェクトの名前の代わりにTextBlockに表示されます。

<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 に答える