我希望以下内容能让我获得单元格中的列索引:
<DataGridTemplateColumn Header="Rec. No." Width="100" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Source={RelativeSource AncestorType=DataGridCell}, Path=Column.DisplayIndex}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
但事实并非如此。任何人都可以告诉我这里有什么问题?
我实际上在寻找行索引(我的网格中需要一个记录编号列),但由于DataGridRow
显然没有“索引”类属性,我试图先做对于列索引,已获得DisplayIndex
。但即便是这个也行不通。
答案 0 :(得分:3)
绑定语法不正确。而不是Source
,它应该是RelativeSource
:
Text="{Binding RelativeSource={RelativeSource AncestorType=DataGridCell},
Path=Column.DisplayIndex}"
对于获取RowIndex
的第二个问题,DataGridRow上没有内置属性,例如RowIndex
。
我建议在底层数据类中使用一些属性并绑定到该属性。
但是,您也可以通过 IValueConverter 手动获取rowIndex。
public class RowIndexConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
DependencyObject item = (DependencyObject)value;
ItemsControl ic = ItemsControl.ItemsControlFromItemContainer(item);
return ic.ItemContainerGenerator.IndexFromContainer(item);
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return Binding.DoNothing;
}
}
<强> XAML:强>
<TextBlock
Text="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow},
Converter={StaticResource RowIndexConverter}}"/>
当然,您需要在XAML的资源部分声明Converter的实例才能使用它。