这实际上是预期的行为:DataContex
tDataGridCell
是整个行。
所以你有3个解决方案:或者你在代码中添加你的绑定,如下所示:
在每个列的构造函数中:
string source = String.Format(CultureInfo.InvariantCulture, "[{0}].", thisColumnIndex);
base.Binding = new Binding(source + "Text");
(你必须找到一种方法来获取“thisColumnIndex”。就我而言,我在创建它们之后立即添加列,我只是将“dataGridOwner.Columns.Count”放在那里)。
或者...
您可以找到一种在每个单元格上获取所需数据上下文的方法(尝试过,但在启用列/行虚拟化时会严重混乱)
或者...
看看那里:
将单元格对象的属性绑定到 WPF DataGrid 中的 DataGridCell
我个人认为第一个更适合我的目的(因为无论如何我在代码中添加了我的列),但这最终取决于你......
就 columnHeaders 而言(并且只有 columnsHeaders,而不是行),您还可以探索“DataTemplate”方式:
将列的标题设置为列本身(这样您就可以将列设置为标题的 DataContext)并使用 DataTemplate。
例如:
在每个列类中:
private static DependencyProperty ColumnHeaderProperty = DependencyProperty.Register("ColumnHeader", typeof(MyDataGridColumnHeader), typeof(MyTextBoxColumn));
public MyDataGridColumnHeader ColumnHeader
{
get { return (MyDataGridColumnHeader)(GetValue(ColumnHeaderProperty)); }
set { SetValue(ColumnHeaderProperty, value); }
}
this.ColumnHeader = new MyDataGridColumnHeader();
Header = this;
在你的dataGrid的xaml中,类似:
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Style.Setters>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="BorderThickness" Value="{Binding BorderThickness}" />
<Setter Property="BorderBrush" Value="{StaticResource DataGridLinesBrush}" />
<Setter Property="Background" Value="{StaticResource DataGridColumnHeaderBackground}" />
<Setter Property="FontFamily" Value="{Binding ColumnHeader.Font.Family, TargetNullValue={StaticResource DefaultFontFamily}}" />
<Setter Property="FontSize" Value="{Binding ColumnHeader.Font.Size, TargetNullValue={StaticResource DefaultFontSize}}" />
<Setter Property="FontStyle" Value="{Binding ColumnHeader.Font.Style, TargetNullValue=Normal}" />
<Setter Property="FontWeight" Value="{Binding ColumnHeader.Font.Weight, TargetNullValue=Bold}" />
<Setter Property="Foreground" Value="{Binding ColumnHeader.Font.Brush, TargetNullValue={StaticResource DataGridColumnHeaderForeground}}" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid Background="{Binding ColumnHeader.Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Name="LeftImage" Grid.Column="0" Stretch="None" Margin="3, 0, 0, 0" Source="{Binding ColumnHeader.LeftImage}" VerticalAlignment="Center"/>
<Image Name="RightImage" Grid.Column="2" Stretch="None" Margin="0, 0, 5, 0" Source="{Binding ColumnHeader.RightImage}" VerticalAlignment="Center"/>
<TextBlock Name="HeaderText"
Grid.Column="1"
VerticalAlignment="Center"
HorizontalAlignment="Center"
TextDecorations="{Binding ColumnHeader.Font.Decorations}"
Text="{Binding ColumnHeader.Text}" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</DataGrid.ColumnHeaderStyle>
当然,我的“MyDataGridColumnHeader”类包含此处引用的所有属性的定义。
希望这可以帮助。