使用MVVM的WPF Datagrid ..是可以绑定到DataTable的两种方式吗?

问题描述:

我有一个DataGrid在我的视图与它的ItemSource绑定到我的ViewModel中的DataTable。当我以编程方式更新DataTable(通过命令添加列)时,更改不会填充到视图中。另外,如果我使视图无效,切换到另一个选项卡然后切换回来,将显示所做的更改。使用MVVM的WPF Datagrid ..是可以绑定到DataTable的两种方式吗?

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

是否有可能让datagrid反映我对绑定的DataTable使用MVVM模式所做的更改?

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

感谢您的帮助! -Steven

虽然在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;   
} 
+0

我找到了一种方法来使您的解决方法适用于我的方案。我不确定为什么我自己没有尝试过,但无论如何,我感谢你的时间和帮助。 谢谢! – stevosaurus 2010-01-19 21:38:05

+0

快乐,它很有帮助 – AndyG 2010-01-19 22:26:36

您必须使用的ObservableCollection <>类型与DataGrid的结合。在这之前,您的DataGrid可以更新ViewModel中DataTable的更改。

提高PropertyChanged事件似乎没用,当你绑定类型而不是ObservableCollection <>