DataGrid
はDataTable
オブジェクトにバインドされています。ユーザーは特別なボタンを押すことができます。このボタンを押すと、このDataTable
オブジェクトに新しい列が動的に追加されます。 DataGrid
のAutoGenerateFields
プロパティは、この列の各列がDataTemplate
(各セルには複数のTextBlock
が含まれています)という形式の列であるため、falseに設定されています。 データバインディングでスタイルを動的に作成/変更する方法
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
に新しい列を作成します。しかし、このスタイルで私のTextBlock
のText
のプロパティに異なる値を動的に設定するにはどうしたらいいですか?
たとえば、DataGrid
の最初の列は、Column_1、Column_2、Column_3にバインドされており、DataTable
にバインドされています。ユーザーが「新しい列を追加」を押すと、プログラムはDataTable
オブジェクトに「Column_4」、「Column5」、「Column 6」の3つの新しい列を作成し、このスタイルで新しい列をDataGrid
に作成します。 DataTable
の新しい列に2番目の列?
どうもありがとうございました。