gpt4 book ai didi

c# - DataTable 在清除和重新填充数据后不更新 DataGrid。 MVVM

转载 作者:行者123 更新时间:2023-12-03 10:13:12 28 4
gpt4 key购买 nike

我的 View 模型是:

 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);
}
}
}

我的 xaml 是:

<DataGrid ItemsSource="{Binding EmployeeDataTable, IsAsync=True}" />
<Button Content="Update DataGrid" Command={Binding UpdateDataGridCommand}/>

当我通过 Button 调用方法 RepopulateDataTable() 时,DataGrid 中的数据永远不会更新。如何使用 DataTable 清除和重新填充 DataGrid

最佳答案

DataTable 本身是不可观察的。因此,UI 不会收到有关您所做更改的通知。您有几个选项可以刷新数据:

  • 您可以使用 ObservableCollection 包装 DataTable 的条目,并将您的 DataGrid 绑定(bind)到该集合。但是,您必须同步 DataTableObservableCollection 之间的数据。
  • 在代码隐藏中,您可以在单击按钮时调用 DataGrid.Items.Refresh() 方法。
  • 您可以将 DataGridItemsSource 属性设置为 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;
}

关于c# - DataTable 在清除和重新填充数据后不更新 DataGrid。 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36215919/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com