我无法使单元格模板与DatagridTemplateColumn一起使用。显示的输出显示所有列,其中每一行都填充有来自第一列的数据。
如果将单元格的文本绑定设置为{Binding [2] .Text},它将在所有列中显示第3列的数据,因此我认为我需要在单元格模板中以某种方式获取索引。我尝试将绑定设置为{Binding [{DisplayIndex}]。Text},但是随后出现“ BindingExpression路径错误:'[]'属性在'object'上找不到”
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>
答案 0 :(得分:0)
这个xaml可以用,但是显然我想使用一个通用的单元格模板。
您不能这样做,因为列之间的绑定路径不同。不支持在XAML中执行类似{Binding [{DisplayIndex}].Text}
的操作。
您可以做的是使用XamlReader.Parse
方法以编程方式创建三个模板:Combining DataTemplates at runtime