如果 AutoGenerateColumns 为 false,则 DataGrid 不会正确绑定到 DataGrid

本文关键字:DataGrid 绑定 如果 false AutoGenerateColumns | 更新日期: 2023-09-27 18:33:31

我一直在为此发疯,我希望我只是错过了一些明显的东西。

我有一个DataGrid要绑定到内存中DataTable。将自动生成列设置为 true 后,我可以编辑字段并将更改传播到数据表,一切都很棒。问题是我想为"状态"字段提供一个下拉组合框。然后,我将AutoGenerateColumns设置为 false 并在 XAML 中手动添加列标题。当我这样做时,我无法再编辑字段并保留更改,而是在我单击离开后每个字段都是空白的。我在调试期间检查了 Datagrid 列的状态,发现绑定读取为 null。对我做错了什么有什么想法吗?

XAML 代码:

<DataGrid Margin="31,29,0,29" Name="dgTickets" RowEditEnding="dgTickets_RowEditEnding" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="ID #" x:Name="ID" />
            <DataGridTextColumn Header="Customer Name" x:Name="CustomerName" />
            <DataGridTextColumn Header="Phone #" x:Name="Phone"/>
            <DataGridComboBoxColumn Header="Status" x:Name="Status"/>
            <DataGridCheckBoxColumn Header="Bool?" x:Name="bool1"/>
            <DataGridCheckBoxColumn Header="Bool?" x:Name="bool2"/>
            <DataGridCheckBoxColumn Header="Bool?" x:Name="bool3"/>
            <DataGridTextColumn Header="Notes" x:Name="Notes"/>
        </DataGrid.Columns>
    </DataGrid>

我的 C# 代码用于创建数据表并将其关联:

    //add columns
        column = new DataColumn("ID", System.Type.GetType("System.String")); //two piece constructor - adds header string and data type
        dbTable.Columns.Add(column); //adds the column to the table
        column = new DataColumn("CustomerName", System.Type.GetType("System.String"));
        dbTable.Columns.Add(column);
        column = new DataColumn("Phone#", System.Type.GetType("System.String"));
        dbTable.Columns.Add(column);
        column = new DataColumn("Status", System.Type.GetType("System.String"));
        dbTable.Columns.Add(column);
        column = new DataColumn("bool1", System.Type.GetType("System.Boolean"));
        dbTable.Columns.Add(column);
        column = new DataColumn("bool2", System.Type.GetType("System.Boolean"));
        dbTable.Columns.Add(column);
        column = new DataColumn("bool3", System.Type.GetType("System.Boolean"));
        dbTable.Columns.Add(column);
        column = new DataColumn("Notes", System.Type.GetType("System.String"));
        dbTable.Columns.Add(column);
        //add rows
        row = dbTable.NewRow(); 
        dbTable.Rows.Add(row); 
        dbTable.AcceptChanges();
        dgTickets.ItemsSource = dbTable.DefaultView;

任何建议不胜感激。我已经尝试了几种不同的方法来让这两个元素一起工作,但如果手动定义标头,我似乎无法正确绑定两个元素。

如果 AutoGenerateColumns 为 false,则 DataGrid 不会正确绑定到 DataGrid

我认为你只需要把绑定放在那里,例如:

<DataGridTextColumn Header="Customer Name" x:Name="CustomerName" Binding={Binding path=CustomerName} />