Способ динамического создания / изменения стиля с привязкой данных - PullRequest
1 голос
/ 06 января 2011

У меня есть DataGrid, который связан с DataTable объектом. Пользователь может нажать специальную кнопку, которая будет динамически добавлять новые столбцы к этому DataTable объекту. Свойство AutoGenerateFields в my 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 s связаны с некоторыми столбцами в DataTable: DataItem.LYP, DataItem.YPU.

Проблема в том, чтобы найти динамический способ установить эту привязку. Когда пользователь добавляет новые столбцы в связанный объект DataTable, я создаю новый столбец в моем DataGrid с этим стилем. Но как я могу динамически установить различные значения для Text свойств для моего TextBlock в этом стиле?

Например, первый столбец в моем DataGrid привязан к Column_1, Column_2, Column_3 в DataTable. Когда пользователь нажимает «Добавить новый столбец», программа создает 3 новых столбца в объекте DataTable с именами «Column_4», «Column5», Column 6 »и создает новый столбец в DataGrid с этим стилем. Я установил привязку для второго столбца к новым столбцам в DataTable?

Большое спасибо.

1 Ответ

0 голосов
/ 06 января 2011

Теперь я использую стиль, который создавался в коде позади. Работает! Спасибо всем.

...