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}" >

其中 ResultTableDataTable。我尝试在运行时以编程方式添加行,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;
}