单元格模板绑定到数组的DataGrid仅显示第一列中的数据?

时间:2019-04-17 17:28:43

标签: wpf datagrid datagridtemplatecolumn

我无法使单元格模板与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>

1 个答案:

答案 0 :(得分:0)

  

这个xaml可以用,但是显然我想使用一个通用的单元格模板。

您不能这样做,因为列之间的绑定路径不同。不支持在XAML中执行类似{Binding [{DisplayIndex}].Text}的操作。

您可以做的是使用XamlReader.Parse方法以编程方式创建三个模板:Combining DataTemplates at runtime