Шаблон WPF DataGridCell с TextBlock - привязка?
Я заменяю ContentPresenter
в DataGridCell
"s Template
с TextBlock
сейчас я ищу правильный Binding
к содержанию.
Нормальный путь Text="{TemplateBinding Content}
для TextBlock
- это не работает. Также Text="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Content, Mode=TwoWay}"
не работает правильно.
Есть другие идеи?
2 ответа
Предположим, вы изменили DataGridCell Template
к следующему
<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>
Так как вы удалили ContentPresenter
, DataGridCell
не имеет возможности отобразить его Content
, Это все еще там, хотя. DataGridCell.Content
это TextBlock
содержащий ваш оригинал Text
и TextBlock
в Template
Другой.
Таким образом, вы получите правильный Text
привязав его к Content.Text
собственность TemplatedParent
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=Content.Text}"/>
Итак, подведем итог. Это работает
<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>
Контекст данных ячейки сетки данных должен представлять собой сами данные. Таким образом, привязка должна быть просто:
<TextBlock Text="{Binding}"/>