Привязка 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>
Другие вопросы по тегам