Шаблон 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}"/>
Другие вопросы по тегам