我有一个MVVM应用程序使用像Josh Smith这样的标签。每个TabItem(View)代表一个单独的ViewModel。
在某些视图中,有一些DataGrids绑定到ObservableCollections。到目前为止一切正常。但是当我开始编辑数据网格时,例如通过键入单元格,然后在点击“输入”提交更改之前,切换到另一个选项卡,我无法真正回到上一个选项卡。 Tab内容发生变化,但tabitem仍然未被选中。 我想我不得不停止datagrid的编辑模式,但是我如何在MVVM应用程序中这样做呢? 对于ICollectionViewSource,我知道我可以这样做
IEditableCollectionView list = (ListCollectionView)this.ItemsView;
if (list.IsEditingItem) list.CommitEdit();
if (list.IsAddingNew) list.CommitNew();
但是我不能为ObservableCollection做这个。我是否必须将Binding更改为可观察集合的视图,还是有另一种方式?
答案 0 :(得分:0)
要自动退出网格的编辑模式,请查看此SO问题:WPF DataGrid - How to automatically exit Edit Mode?
我还建议查看一下绑定在网格中编辑的模型类的IEditableObject
接口。这为您提供了一种实现添加数据和编辑的一致方法,以便对对象数据进行更改(或回滚更改)。
IEditableObject
要求您实施以下方法:
BeginEdit()
CancelEdit()
EndEdit()
DataGrid已经设计为可以开箱即用IEditableObject
个对象。
博士。 WPF在这里写了一篇关于这个接口的好文章:ItemsControl: 'E' is for Editable Collection并且在这篇MSDN文章中有一些使用IEditableObjects和dataGrid的示例代码:How to: Implement Validation with the DataGrid Control