WPF MVVM将DataTable绑定到DataGrid不显示数据

Gui*_*meA 5 c# wpf datatable datagrid mvvm

我有一个简单的控件,其中包含一个 DataGrid,其中 ItemsSource 绑定到 DataTable。当我填充 DataTable 时,我可以看到 DataGrid 中添加了行,但没有显示任何数据。我没有为此 DataGrid 使用任何特殊样式(采用默认样式),唯一的设置是将 AutoGenerateColumn 设置为 True。

在 XAML 中

<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding TableResult}"/>
Run Code Online (Sandbox Code Playgroud)

在视图模型中

private DataTable tableResult = new DataTable();
public DataTable TableResult
{
   get { return tableResult; }
   set { tableResult = value; OnPropertyChanged("TableResult"); }
}

private void FillTable()
{
   DataColumn c = new DataColumn();
   c.ColumnName = "Col1";
   this.TableResult.Columns.Add(c);

   c = new DataColumn();
   c.ColumnName = "Col2";
   this.TableResult.Columns.Add(c);

   DataRow row1 = this.TableResult.NewRow();
   row1["Col1"] = "Blue";
   row1["Col2"] = "12";;
   this.TableResult.Rows.Add(row1);

   DataRow row2 = this.TableResult.NewRow();
   row2["Col1"] = "Red";
   row2["Col2"] = "18";
   this.TableResult.Rows.Add(row2);

   DataRow row3 = this.TableResult.NewRow();
   row3["Col1"] = "Yellow";
   row3["Col2"] = "27";
   this.TableResult.Rows.Add(row3);
}
Run Code Online (Sandbox Code Playgroud)

suj*_*lil 0

您也必须定义您的列:例如:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Source=TableResult}" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding col1}"/>
                <DataGridTextColumn Header="Surname" Binding="{Binding col2}"/>
                <DataGridTextColumn Header="Phone" Binding="{Binding col3}" />
            </DataGrid.Columns>
 </DataGrid>
Run Code Online (Sandbox Code Playgroud)

并确保您已INotifyPropertyChanged在视图模型中实现