WPF Datagrid使用MVVM ..是否可以双向绑定到DataTable?

时间:2010-01-19 17:08:45

标签: wpf datagrid mvvm datatable wpfdatagrid

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

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

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

我可以使用datagrid事件来刷新视图代码中的数据网格吗?

感谢您的帮助! -Steven

2 个答案:

答案 0 :(得分: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;         
}

答案 1 :(得分:1)

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

使用类型绑定而不是 ObservableCollection<> 时,提升PropertyChanged事件似乎无用。