Catel 使用 IEditableObject

Catel using IEditableObject

我正在测试 Catel MVVM,我想使用已实现的 IEditableObject。我有一些问题,但我发现的 documentation 在这一点上不是很详细。

有人有帮助吗 link,我必须如何设置它或它如何工作,或类似的东西?或者我真的应该看看源代码,以获得这些要点并感受一下 catel 是如何工作的。

我得到的问题是:

我只能取消一次编辑。如果我再次编辑相同的 ViewModel,则取消不再有效。 我认为在第一次取消后只缺少一个 BeginEdit(),就像 documentation 建议的那样。这里有一些关于这一点的信息:

  1. 我编辑了 ViewModel 并且模型设置了新值
  2. 我执行了CancelViewModelAsync(),Model中的setter没有被触及
  3. 我编辑了 ViewModel,模型设置了新值。当前值为原值
  4. 我执行CancelViewModelAsync(),什么都没发生
  5. 我编辑了 ViewModel,模型设置了新值。当前值是步骤 3 中编辑的值,如视图显示

感谢帮助

一个问题中有很多问题,但会尝试回答它们:

Q1) SaveViewModelAsync()

方法到底是做什么的

它在所有支持它的模型上调用 IEditableObject.EndEdit(并装饰有 ModelAttribute

Q2) 数据保存在哪里,或者我可以在哪里配置?

它只是批准对模型的更改,它不会 "save" 任何东西。因此,例如,如果您使用的是 Catel 模型,它将提交 VM 所做的更改。如果您取消,它会将模型恢复到您初始化 VM 时的状态。

Q3) 我如何将它与 Orc.EntityFramework6 一起使用,或者我需要手动设置吗?

您必须手动执行此操作。 Catel 中的 VM 与模型一起工作,这取决于您将它们保存到何时/何处(例如数据库、磁盘、Web 服务等)

Q4) SaveViewModelAsync() 和 SaveAsync() 有什么区别?

SaveViewModelAsync 是被调用的 public 方法,它会为您处理管道。 SaveAsync 是一种您可以覆盖以添加额外保存逻辑(例如存储在数据库中、更新服务等)的方法。

Q5) CancelViewModelAsync() 和 CancelAsync() 有什么区别?

见第 4 题