我在让单元格模板与 DatagridTemplateColumn 一起使用时遇到问题。 显示的输出显示用每行第一列中的数据填充的所有列。
如果我将单元格的文本绑定设置为 {绑定 [2]。Text},它显示了所有列中第 3 列的数据,所以我认为我需要在单元格模板中获取索引。 我尝试将绑定设置为 {绑定 [{显示索引}]。文本},但随后我收到" 绑定表达式路径错误:"[]"属性在'对象'上找不到">
PS:我必须使用DataGridTemplateColumn,因为我将来会做更复杂的显示。
以下是相关的 xaml:
<DataGrid ItemsSource="{Binding TableItems}" AutoGenerateColumns="False" >
<DataGrid.Resources>
<DataTemplate x:Key="MyCellTemplate" >
<TextBlock Text="{Binding Text}" />
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}" Header="Col1" />
<DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}" Header="Col2" />
<DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}" Header="Col3" />
</DataGrid.Columns>
</DataGrid>
绑定数据:
public ObservableCollection<string[]> TableItems { get; set; }
...
TableItems.Add(new string[]{"A","B","C"};
TableItems.Add(new string[]{"D","E","F"};
TableItems.Add(new string[]{"G","H","I"};
当我运行程序时,所有列的数据都与每行中的第一列相同。 例如:
起始数据:
A,B,C
D,E,F
G,H,I
结果输出:
A,A,A
D,D,D
G,G,G
预期产出:
A,B,C
D,E,F
G,H,I
编辑:-----------------------------------
更多信息:xaml 有效,但显然我想使用一个通用的单元格模板。
<DataGrid.Columns>
<DataGridTemplateColumn Header="col1" > <DataGridTemplateColumn.CellTemplate> <DataTemplate><TextBlock Text="{Binding [0].Text}" /></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn>
<DataGridTemplateColumn Header="col2" > <DataGridTemplateColumn.CellTemplate> <DataTemplate><TextBlock Text="{Binding [1].Text}" /></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn>
<DataGridTemplateColumn Header="col3" > <DataGridTemplateColumn.CellTemplate> <DataTemplate><TextBlock Text="{Binding [2].Text}" /></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn>
</DataGrid.Columns>
这个 xaml 有效,但显然我想使用一个通用的单元格模板。
不能,因为列之间的绑定路径不同。不支持在 XAML 中执行类似{Binding [{DisplayIndex}].Text}
的操作。
您可以做的是使用XamlReader.Parse
方法以编程方式创建三个模板:在运行时合并数据模板