将WPF DatagridCell绑定到源

时间:2013-08-20 14:52:58

标签: wpf binding controltemplate

我的原始数据网格确实有一些列,其中绑定值为bool。[默认情况下,这将显示为复选框]

我已经定义了一个单元格模板,可以创建

我想为此使用一个通用的datagrid controltemplate,就像下面定义的一样。 然而,它并没有带来约束力 - 它显示为空白。

有人可以帮我发现我做错了吗?

    <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 个答案:

答案 0 :(得分:0)

您正在尝试绑定DataGridCell的Binding属性,但DataGridCell没有任何Binding属性。 Yoy应该设置Path = Column.Binding。 DataGridCell具有Column属性,该属性还具有Binding属性。

Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Column.Binding}" 

我希望这会有所帮助。

答案 1 :(得分:0)

您需要提供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>

更新&gt;&gt;&gt;

如果您想要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>