1

我的视图中有一个数据网格,它的 ItemSource 绑定到我的 ViewModel 中的 DataTable。当我以编程方式更新 DataTable(通过命令添加列)时,更改不会填充到视图中。此外,如果我通过切换到另一个选项卡然后切换回来使视图无效,则会显示所做的更改。

我的 ViewModel 继承自 INotifyPropertyChanged,并且我正确地引发了 PropertyChanged 事件,因为我对 ViewModel 中的其他绑定属性使用相同的过程并且它们按预期工作。

是否可以让数据网格反映我使用 MVVM 模式对绑定 DataTable 所做的更改?

是否有数据网格事件可以用来刷新视图代码中的数据网格?

谢谢你的帮助!-史蒂文

4

2 回答 2

2

虽然在 DataTable 中修改行和编辑单元格内容会反映在 DataGrid 中(对我有用),但 ColumnChanges 似乎并非如此。如果您使用 AutoGenerateColumns 选项,那么我想它会在初始化时这样做,但之后不会注意更改。

如果您可以在将列添加到 DataTable 时找到触发的事件(我没有注意到),那么您可以在后面的代码中手动添加它。另一个可能可行或不可行的技巧是将您的 DataTable 属性设置为 null,然后将您的属性重新设置为 DataTable,每次都调用 OnPropertyChanged。这应该会强制重建 DataGrid。

private DataTable _myDataTable;

public DataTable MyDataTable
{
   get { return _myDataTable; }
   set
   {
        _myDataTable = value;
        OnPropertyChanged("MyDataTable");
   }
}

void SomeMethod()
{
     ....results in column changes
     DataTable holder;
     holder = MyDataTable
     MyDataTable = null;
     MyDataTable = holder;         
}
于 2010-01-19T21:11:57.227 回答
1

您必须使用ObservableCollection<>类型来绑定 DataGrid。在此之前,您的 DataGrid 可以更新 ViewModel 中 DataTable 的更改。

当您使用类型而不是ObservableCollection<>绑定时,引发 PropertyChanged 事件似乎没用。

于 2012-08-20T03:34:11.763 回答