Привязка WPF DatagridCell к источнику
В моей исходной сетке данных есть несколько столбцов, в которых значение привязки равно bool.[По умолчанию это будет отображаться как флажки]
Я определил шаблон ячейки и смог создать
Я хотел бы использовать для этого общий шаблон контроля сетки данных, подобный приведенному ниже. Однако это не приводит к значению привязки - оно отображается пустым.
Может ли кто-нибудь помочь мне заметить, что я делаю неправильно?
<Style x:Key="dgCellBool" TargetType="{x:Type DataGridCell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Ellipse>
<Ellipse.Height>10</Ellipse.Height>
<Ellipse.Width>10</Ellipse.Width>
<Ellipse.Style>
<Style TargetType="Ellipse">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Binding}" Value="True">
<Setter Property="Fill" Value="Red"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Binding}" Value="False">
<Setter Property="Fill" Value="Green"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Спасибо Раджеш
2 ответа
Вы пытаетесь связать свойство Binding объекта DataGridCell, но DataGridCell не имеет какого-либо свойства Binding. Yoy должен установить Path=Column.Binding. DataGridCell имеет свойство Column, которое дополнительно имеет свойство Binding.
Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Column.Binding}"
Я надеюсь, это поможет.
Вы должны предоставить ContentPresenter
представить содержание и убедитесь, что вы добавляете Border
что вы потеряете от оригинала Template
:
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Center"
HorizontalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
ОБНОВЛЕНИЕ >>>
Если вы хотите, чтобы ваш Ellipse
вместо Border
Просто добавьте его обратно с Grid
... Ellipse
объекты не могут иметь никакого содержимого:
<Style x:Key="dgCellBool" TargetType="{x:Type DataGridCell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid>
<Ellipse Height="10" Width="10">
<Ellipse.Style>
<Style TargetType="Ellipse">
<Setter Property="Fill" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={
RelativeSource TemplatedParent}, Path=Binding}" Value="False">
<Setter Property="Fill" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
<ContentPresenter VerticalAlignment="Center"
HorizontalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>