以自定义样式绑定

时间:2014-03-14 09:46:40

标签: wpf binding datagrid

我正在使用具有多个固定列的DataGrid。 此外,我还动态添加了包含CheckBox标题自定义样式的列。

这是风格:

            <Style TargetType="DataGridColumnHeader" x:Key="CustomerColumnHeader">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <Grid HorizontalAlignment="Center">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*"/>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>
                                <TextBlock Grid.Row="0" HorizontalAlignment="Center" Margin="3,0,3,0" Text="{Binding}"/>
                                <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center">
                                    <CheckBox Margin="0,2,5,0"/>
                                    <TextBlock HorizontalAlignment="Stretch" TextAlignment="Center" Text="Interpolate"/>
                                </StackPanel>
                            </Grid>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="BorderBrush" Value="Black"/>
                <Setter Property="BorderThickness" Value="0,1,1,1"/>
            </Style>

这是我添加列并设置其样式的方式:

                grid.Columns.Add(new CustomDataGridTextColumn()
                {
                    HeaderStyle = (Style)grid.Resources["CustomerColumnHeader"],
                    Header = "Test",
                    IsReadOnly = false,
                    Binding = new Binding(binding),
                    Interpolate = true
                });

编辑:这是我的Column类的样子:

class CustomDataGridTextColumn : DataGridTextColumn
{
    public bool Interpolate { get; set; }
}

它只不过是添加了属性的DataGridTextColumn

如何将样式IsChecked的{​​{1}}属性绑定到CheckBox的{​​{1}}属性?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用RelativeSource BindingCheckbox.IsChecked属性绑定到自定义列属性。试试这个:

<CheckBox Margin="0,2,5,0" IsChecked="{Binding Interpolate, RelativeSource={
    RelativeSource AncestorType={x:Type YourXamlPrefix:CustomDataGridTextColumn}}}" />

显然,如果这种方法有效,那么当Style应用于父类型为CustomDataGridTextColumn的对象时,才能正常工作正确地将YourXamlPrefix命名空间声明为XAML中自定义列的CLR命名空间。