WPF:在 DataTable,MVVM 方式中更改列后刷新 DataGrid
WPF: Refreshing DataGrid after columns changed in DataTable, MVVM way
我正在使用 vanilla WPF Datagrid
,它的 ItemsSource
绑定到 DataTable
:
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding ResultTable.DefaultView}" >
其中 ResultTable
是 DataTable。我尝试在运行时以编程方式添加行,DataGrid
将相应更新。但是,当我在运行时添加或删除列时,DataGrid
不会更新。这是我的 ViewModel
中的内容
class MyViewModel : ObservableObject
{
private DataTable resultTable;
public DataTable ResultTable
{
get { return resultTable; }
set
{
resultTable = value;
RaisePropertyChanged("ResultTable");
}
}
public void AddColumn(string columnName)
{
ResultTable.Columns.Add(columnName);
}
}
我在这里发现了一个几乎相同的问题WPF Datagrid using MVVM.. is two way binding to DataTable possible?,但似乎没有确定的答案。不幸的是,提出这个问题的人似乎找到了解决方法,但没有费心 post 它...
我也在这里找到了解决方案 http://www.mikeware.com/2012/08/datagrid-dilemma/ 但它看起来非常 "hackish" (更不用说非 MVVM 了)并且作者自己承认如果他发现他更愿意用另一种方式来做一.
如何在添加新列时强制 DataGrid
更新?如果可能的话,我更喜欢以 MVVM 的方式来做。
首先将此代码添加到 ViewModel:
private static readonly DataTable _dt = new DataTable();
然后你可以在添加列时添加类似这样的代码:
public void AddColumn(string columnName)
{
var temp = this.ResultTable;
this.ResultTable = _dt;
temp.Columns.Add(columnName);
this.ResultTable = temp;
}
我正在使用 vanilla WPF Datagrid
,它的 ItemsSource
绑定到 DataTable
:
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding ResultTable.DefaultView}" >
其中 ResultTable
是 DataTable。我尝试在运行时以编程方式添加行,DataGrid
将相应更新。但是,当我在运行时添加或删除列时,DataGrid
不会更新。这是我的 ViewModel
class MyViewModel : ObservableObject
{
private DataTable resultTable;
public DataTable ResultTable
{
get { return resultTable; }
set
{
resultTable = value;
RaisePropertyChanged("ResultTable");
}
}
public void AddColumn(string columnName)
{
ResultTable.Columns.Add(columnName);
}
}
我在这里发现了一个几乎相同的问题WPF Datagrid using MVVM.. is two way binding to DataTable possible?,但似乎没有确定的答案。不幸的是,提出这个问题的人似乎找到了解决方法,但没有费心 post 它...
我也在这里找到了解决方案 http://www.mikeware.com/2012/08/datagrid-dilemma/ 但它看起来非常 "hackish" (更不用说非 MVVM 了)并且作者自己承认如果他发现他更愿意用另一种方式来做一.
如何在添加新列时强制 DataGrid
更新?如果可能的话,我更喜欢以 MVVM 的方式来做。
首先将此代码添加到 ViewModel:
private static readonly DataTable _dt = new DataTable();
然后你可以在添加列时添加类似这样的代码:
public void AddColumn(string columnName)
{
var temp = this.ResultTable;
this.ResultTable = _dt;
temp.Columns.Add(columnName);
this.ResultTable = temp;
}