我的View中有一个datagrid,它的ItemSource绑定到我的ViewModel中的DataTable。当我以编程方式更新DataTable(通过命令添加列)时,更改不会填充到View。此外,如果我使视图无效,通过切换到另一个选项卡然后切换回来,将显示所做的更改。
我的ViewModel继承自INotifyPropertyChanged,我正在提升PropertyChanged事件,因为我对ViewModel中的其他绑定属性使用相同的进程,并且它们按预期工作。
是否可以让datagrid反映我使用MVVM模式对绑定的DataTable所做的更改?
我可以使用datagrid事件来刷新视图代码中的数据网格吗?
感谢您的帮助! -Steven
答案 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事件似乎无用。