【问题标题】:Josh Smith's MVVM Tabs get unselectedJosh Smith 的 MVVM 选项卡未选中
【发布时间】:2012-08-04 17:23:34
【问题描述】:

我有一个 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 执行此操作。我必须将绑定更改为可观察集合的视图还是有其他方法?

【问题讨论】:

  • 您能否生成一个小代码示例来演示新项目中的问题?

标签: wpf mvvm observablecollection tabitem


【解决方案1】:

要自动退出网格的编辑模式,看看这个 SO 问题:WPF DataGrid - How to automatically exit Edit Mode?

我还建议查看IEditableObject 接口,了解必须在网格内编辑的模型类。这为您提供了一种一致的方式来实现添加数据并编辑对象数据的更改(或更改的回滚)。 p>

IEditableObject 要求你实现以下方法:

BeginEdit()
CancelEdit()
EndEdit()

DataGrid 已经被设计成可以直接使用IEditableObject 对象。

博士。 WPF 在这里写了一篇关于接口的好文章:ItemsControl: 'E' is for Editable Collection,在这篇 MSDN 文章中有一些使用 IEditableObjects 和 dataGrid 的示例代码:How to: Implement Validation with the DataGrid Control

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多