Шаблон WPF DataGridCell с TextBlock - связывание? - PullRequest
4 голосов
/ 23 августа 2011

я заменяю ContentPresenter в DataGridCell Template на TextBlock, и теперь я ищу правильный Binding к содержимому.

Обычный способ - Text="{TemplateBinding Content} для TextBlock - это не работает.Также Text="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Content, Mode=TwoWay}" не работает правильно.

Есть еще идеи?

Ответы [ 2 ]

14 голосов
/ 23 августа 2011

Предположим, вы изменили 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>
2 голосов
/ 23 августа 2011

Контекст данных ячейки сетки данных должен представлять собой сами данные.Таким образом, привязка должна быть просто:

<TextBlock Text="{Binding}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...