通过数据绑定动态创建/修改样式的方法

时间:2011-01-06 04:08:21

标签: wpf datagrid binding styles controltemplate

我有一个DataGrid,它绑定到DataTable个对象。用户可以按一个特殊按钮,该按钮将动态地向此DataTable对象添加新列。我AutoGenerateFields中的DataGrid属性设置为false,因为其中的每一列都是带有DataTemplate的样式列(每个单元格包含多个TextBlock)。

我为DataGrid编写了以下样式:

<Style TargetType="{x:Type igDP:CellValuePresenter}" x:Key="YPStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
                    <Grid Margin="4" Visibility="{Binding Path=DataItem.YPURL, Converter={StaticResource MyVisiblityConverter}}">
                        <Grid.RowDefinitions>
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.Row="0" Grid.RowSpan="2" Grid.Column="0"
                                           FontWeight="DemiBold"
                                           FontSize="18"
                                           VerticalAlignment="Center"
                                           Text="{Binding Path=DataItem.LYP}" x:Name="c"/>
                        <TextBlock Grid.Row="0" Grid.Column="1"
                                           Foreground="{Binding Path=DataItem.RYP, Converter={StaticResource MyColorConverter}}"
                                           Text="{Binding Path=DataItem.RYP}"
                                           Margin="3, 0, 0, 0"
                                           HorizontalAlignment="Right"
                                           VerticalAlignment="Center"/>
                        <StackPanel Orientation="Horizontal" VerticalAlignment="Center"
                                            Grid.Row="0" Grid.Column="2"
                                            HorizontalAlignment="Right"
                                            Margin="8, 0, 0, 0">
                            <Image Source="../icons/icon_url.gif"
                                           Cursor="Hand"/>
                            <Label Content="url"
                                           Foreground="Blue"
                                           Cursor="Hand"
                                           ToolTip="{Binding Path=DataItem.YPU}"/>
                        </StackPanel>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

您可以看到,TextBlock已绑定到DataTable: DataItem.LYP, DataItem.YPU中的某些列。

问题是找到一种动态方式来设置绑定。当用户向绑定的DataTable对象添加新列时,我使用此样式在DataGrid中创建了一个新列。但是,如何在此样式中为Text动态设置TextBlock属性的不同值?

例如,DataGrid中的第一列绑定到DataTable中的Column_1,Column_2,Column_3。当用户按下“添加新列”时,程序在DataTable对象中创建3个新列,名称为“Column_4”,“Column5”,第6列“,并使用此样式在DataGrid中创建新列。但是,如何将第二列的绑定设置为DataTable

中的新列

非常感谢。

1 个答案:

答案 0 :(得分:0)

现在我使用的是代码背后创建的样式。它的工作原理! 谢谢大家。