清除并重新填充数据后,DataTable不会更新DataGrid。MVVM

Ste*_*pUp 0 c# wpf datatable datagrid mvvm

我的viewModel是:

 public class MainWindowViewModel
 {
    public MainWindowViewModel()
    {
        PopulateDataTable();
    }
    private DataTable employeeDataTable;
    public DataTable EmployeeDataTable
    {
        get { return employeeDataTable; }
        set
        {
            employeeDataTable = value;
            OnPropertyChanged("EmployeeDataTable");
        }
    }

    private void PopulateDataTable()
    {            
        var _ds = new DataSet("Test");
        employeeDataTable = new DataTable();
        employeeDataTable = _ds.Tables.Add("DT");
        for (int i = 0; i < 10; i++)
        {
            employeeDataTable.Columns.Add("Column " + i.ToString());
        }
        for (int i = 0; i < 15; i++)
        {
            var theRow = employeeDataTable.NewRow();
            for (int j = 0; j < 10; j++)
            {
              theRow[j] = "a";                 
            }
            employeeDataTable.Rows.Add(theRow);
        }
    }

    private void RepopulateDataTable(object obj)
    {
          EmployeeDataTable.Clear();
          for (int i = 0; i < 10; i++)
          {
              var theRow = employeeDataTable.NewRow();
              for (int j = 0; j < 10; j++)
              {
                  theRow[j] = j + DateTime.Now.ToString();
              }
              employeeDataTable.Rows.Add(theRow);        
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的xaml是:

<DataGrid ItemsSource="{Binding EmployeeDataTable, IsAsync=True}" />
<Button Content="Update DataGrid" Command={Binding UpdateDataGridCommand}/>
Run Code Online (Sandbox Code Playgroud)

当我打电话的方法RepopulateDataTable()通过Button在,那么数据DataGrid永远不会更新。如何清除和重新填充DataGrid使用DataTable

Yus*_*dın 5

DataTable本身是不可观察的。因此,不会通知UI您所做的更改。您可以通过以下几种方式刷新数据:

  • 你可以用的条目DataTableObservableCollection和绑定你的DataGrid这个集合。但是,您必须在DataTable和之间同步数据ObservableCollection
  • 在后面的代码DataGrid.Items.Refresh()中,单击按钮时可以调用method。
  • 您可以将的ItemsSource属性设置DataGrid为null,然后再次设置为DataTable

例:

private void RepopulateDataTable(object obj)
{
    EmployeeDataTable.Clear();
    for (int i = 0; i < 10; i++)
    {
        var theRow = employeeDataTable.NewRow();
        for (int j = 0; j < 10; j++)
        {
            theRow[j] = j + DateTime.Now.ToString();
        }
        employeeDataTable.Rows.Add(theRow);        
    }

    DataTable tempDataTable = EmployeeDataTable;
    EmployeeDataTable = null;
    EmployeeDataTable = tempDataTable;
}
Run Code Online (Sandbox Code Playgroud)