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?
DataTable本身是不可观察的。因此,不会通知UI您所做的更改。您可以通过以下几种方式刷新数据:
DataTable与ObservableCollection和绑定你的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)