问题标签 [ieditableobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
750 浏览

mvvm - Silverlight MVVM IEditableObject 对话框

我正在玩John Papa的BookShelf演示应用程序。并且想对图书项目的编辑方式进行一些调整。在该应用程序中,BookView 和 EditBookWindow 都绑定到同一个 ViewModel BookViewModel ,这很好。

选择一本书将导致 EditBookWindow 在子窗口中打开

如果您编辑任何值,则所选图书的数据将在 BookViewModel 中更新。现在这就是问题发生的地方。如果您在对话框窗口上按取消,更改仍将保留。

我想做的是在您打开对话框窗口并开始编辑之前将其更改为将实体“回滚”到它的状态。

我在这个问题上的谷歌搜索让我认为解决这个问题的最有效(和简单)的方法是使用 IEditableObject 接口:BeginEdit、EndEdit 或 CancelEdit。

我无法弄清楚如何实现这个接口。由于 EditBookWindow 和 BookView 共享相同的 ViewModel,因此更改的项目存储在属性 SelectedBook

  1. IEditableObject 是解决我的问题的最简单方法吗?
  2. 任何人都可以就哪里(ViewModel,Views)以及我如何实现接口给出一些指示?
0 投票
1 回答
571 浏览

silverlight - Silverlight DataForm、MVVM、IEditable 对象和自定义 EditTemplate。如何进行自定义脏状态检查

Silverlight DataForm 和子集合有一个有趣的问题。我也有一个可行的解决方案,但感觉就像一个黑客(这一个黑客),我想知道是否有人有一个更优雅的解决方案。

我有一个绑定到 GroupViewModels 集合的 DataForm。每个 GroupViewModel 都有一个用户视图模型的 ObservableCollection,我希望用户能够在显示 DataForm 的 EditTemplate 时添加和删除它。

用于执行此操作的 UI 是一个简单的 ComboBox,其中包含所有用户的列表和当前在组中的用户的 ListBox。有一个添加和删除按钮可将用户从一个列表移动到另一个列表。

现在,...... DataForm 绑定到的视图模型实现了 IEditableObject,......这很酷,因为如果取消编辑,我会得到回滚行为,但在这种情况下还不够。我需要一种方法来告诉 DataForm 我的 VM 是否处于脏状态。

由于我的 ViewModel 有一个 SelectedUserToAdd 属性,所有用户 ComboBox 的 SelectedItem 都绑定到该属性,因此当用户选择要添加的用户时,PropertyChanged 事件会在我的 VM 上触发,并且 DataForm 认为某些内容已更改并且提交(确定)按钮点亮。当 ListBox 中的选择因 SelectedUserToRemove 属性而改变时,它也会亮起。

显然,如果 ListBox 中的 UserViewModels 已更改,我想要的是让提交按钮亮起。

解决方案很简单。如果我从 SelectedUserToAdd 和 SelectedUserToRemove 属性中删除更改通知,我可以停止提交按钮亮起,并且我可以使用名为“Dirty”的虚拟属性让提交按钮亮起,当 AddUser 或 DeleteUser 命令获取时会引发 NotifyPropertyChanged被解雇了。

正如我所说,..它有效,但感觉不对。有人有更好的主意吗?

非常感谢提前。

0 投票
1 回答
3043 浏览

wpf - IEditableObject 与 DataGrid 的用途是什么?

以下是http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx的摘录:

5.数据源项目应该实现IEditableObject以获得事务编辑功能。

如果您不熟悉 IEditableObject,请参阅这篇 MSDN 文章,其中有很好的解释和代码示例。DataGrid 具有通过 IEditableObject 接口进行事务编辑的功能。当您开始编辑单元格时,DataGrid 会进入单元格编辑模式和行编辑模式。这意味着您可以取消/提交单元格以及取消/提交行。例如,我编辑单元格 0 并按 Tab 键转到下一个单元格。按 T​​ab 键时提交单元格 0。我开始在单元格 1 中输入并意识到我想取消操作。我按“Esc”,它会恢复单元格 1。我现在意识到我想取消整个操作,所以我再次按“Esc”,现在单元格 0 恢复到其原始值。

即使没有实现 IEditableObject,我也会得到相同的事务行为。我错过了什么?

0 投票
0 回答
977 浏览

.net - WPF Datagrid:如何避免 IEditableObject 行为?

我有一个 Wpf Datagrid,其中包含作为 ItemsSource 的实体集合;实体类型实现 IEditableObject 接口(BeginEdit、CancelEdit、EndEdit)。

我想防止数据网格自动调用 IEditableObject 接口的方法,因为我管理当我选择一行网格时显式调用“BeginEdit”并在没有确认就离开该行时调用“CancelEdit”的行为。

相反,每当我选择一个单元格时,数据网格都会自动调用“BeginEdit”,我会避免它。

是否可以禁用此默认行为?

0 投票
2 回答
311 浏览

wpf - 为什么 Linq.Enumerable.Where 会破坏我的 ObservableCollection

背景:

我正在编写一个 WPF 应用程序,严格遵循 MVVM 模式。我有一个 BaseRepository 类作为连接到不同数据库的通用接口(EF 不是一个选项),一切正常;这只是一个技术问题。

我使用一个名为 NotifyingCollection 的包装 ObservableCollection 来订阅 IEditableObject 的 ItemEndEdit 事件(我的 ViewModelBase 实体包装器实现了 INotifyPropertyChanged 和 IEditableObject 成员)。

当在我的 WPF DataGrid 中编辑项目时调用 ReadAll 方法时,提供的代码示例会引发“此视图不允许使用 'EditItem' ”异常。但是,如果我用注释掉的部分替换方法中的行,它就完美了!

问题:

换句话说,它看起来像中继 Linq.Enumerable.Where 扩展方法而不是返回集合的 IEnumerable 版本,从自定义集合中删除了功能;如果它们都是 IEnumerable,为什么会发生这种情况?

代码示例:

0 投票
2 回答
429 浏览

c# - 防止 IEditableObject.BeginEdit() 被多次调用

我有一个实体,例如客户继承自IEditableObject如下所述:

在我的 UI 类中BindingSource,我有一个所有控件都绑定到的 ,以及 2 个按钮“更改”和“取消”:

这工作正常。

但是现在我发现,这BeginEdit()不仅是从我的显式调用中调用的,而且是从许多其他代码中调用的,例如:

或者

或者

当我现在单击“更改”按钮时,backupAvailable已经设置了错误的值。当我单击“取消”时,会写回错误的值。

有没有可能阻止这种呼唤?或者我可以BeginEdit()在呼叫的来源方面有所不同吗?

0 投票
0 回答
58 浏览

c# - DataGrid、MVVM 和 IEditableObject

我创建了一个数据网格。现在我想使用 RestSharp 将我编辑的单元格保存在数据库中。我读到它适用于 IEditableObject。

我试图插入它。这是我的 ViewModel 的开始:

然后创建了 BeginEdit、CancelEdit 和 EndEdit 方法。我将代码添加到 EndEdit 类:

这就是我的 DataGrid 的样子:

不幸的是,他没有使用 RestSharp 执行命令。他只是没有回应。

错误在哪里?我是不是忘记了什么?