0

我有一个 MVVM 应用程序,它使用像 Josh Smith 的示例这样的选项卡。每个 TabItem (View) 代表一个单独的 ViewModel。

在某些视图上,有绑定到 ObservableCollections 的 DataGrid。到目前为止一切正常。但是,当我开始编辑数据网格时,例如在单元格中键入内容,然后在点击“输入”提交更改之前,切换到另一个选项卡,我真的无法回到前一个选项卡。Tab 内容发生变化,但 tabitem 保持未选中状态。我想我必须以某种方式停止数据网格的编辑模式,但我该如何在 MVVM 应用程序中做到这一点?对于 ICollectionViewSource 我知道我可以这样做

  IEditableCollectionView list = (ListCollectionView)this.ItemsView;
  if (list.IsEditingItem) list.CommitEdit();
  if (list.IsAddingNew) list.CommitNew();

但我不能为 ObservableCollection 做到这一点。我是否必须将绑定更改为可观察集合的视图,还是有其他方法?

4

1 回答 1

0

要自动退出网格的编辑模式,请查看这个 SO 问题:WPF DataGrid - 如何自动退出编辑模式?

我还建议查看必须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

于 2012-08-09T15:04:03.843 回答