i replace the ContentPresenter
in the DataGridCell
's Template
with a TextBlock
an now i search for the correct Binding
to the content.
The normal way is Text="{TemplateBinding Content}
for the TextBlock
- it doesn't work. Also Text="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Content, Mode=TwoWay}"
doesn't work correct.
Any other ideas?
Suppose you have changed the DataGridCell Template
to the following
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<TextBlock Text="{Binding}"/>
<!--<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> -->
</Border>
</ControlTemplate>
Since you removed the ContentPresenter
, the DataGridCell
has no way of displaying its Content
. It's still there though. The DataGridCell.Content
is a TextBlock
containing your original Text
and the TextBlock
in the Template
is another.
So you'll get the correct Text
by binding it to the Content.Text
property of the TemplatedParent
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=Content.Text}"/>
So, to sum it up. This works
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=Content.Text}"/>
</Border>
</ControlTemplate>
The data context of the data grid cell should be the data itself. So the binding should simply be:
<TextBlock Text="{Binding}"/>
来源:https://stackoverflow.com/questions/7159978/wpf-datagridcell-template-with-textblock-binding