Catel 多次编辑主从视图
Catel Edit Master-Detail View multiple times
我正在尝试在 Catel 中多次编辑 Master-Detail View。
我的问题 是,如果在 catel 中没有使用 SaveViewModelAsync
和 [=11= 来处理主从视图和多个版本的通用方法] 方法?
当我的 Master-ListItem 不是具有自己的 ViewModel 的 UserControl 并且当我在保存或取消后更改选定的 Master-ListItem 以便创建新的 ViewModel 时,工作流有效。但我不想在 save/cancel 之后取消或更改选择。另外,我可能要为 Master-ListItems 创建一个 UserControl + ViewModel。
题目限制条件:
我从 Geert van Horrik 的 讨论中得到了信息,
- 不直接支持多次编辑循环
- 一个模型只能由一个视图模型访问
问题:
我只能使用 SaveViewModelAsync
和 CancelViewModelAsync
一次。之后,还活着的 ViewModels
- 不会从模型中获得任何更新
- 不要从数据创建备份,以便可以再次还原更改
重现代码:
我创建了一个 WPF Project,我在其中测试了所有内容。
可能的解决方案:
- 我可以使用EditableObjectHelper并自己处理
- 我必须在保存或取消后再次实例化 VewModel,就像它发生在我的示例代码中的选择更改一样
解的限制:
- 如果我对主视图的 ListItems 使用专门的 UserControl,则 2 个 ViewModel 正在查看 1 个模型。在
SaveViewModelAsync
之后,ViewModel 没有收到模型的任何通知。所以我也必须再次实例化这个 ViewModel。但我会打破 ViewModel-Model 的 1-1 关系。
我的结论:
看来,我必须实例化所有这些 ViweModels 并独自处理这个工作流。 ViewModelLifetimeManagement.PartlyManual
(CloseViewModelOnUnloaded
已过时)似乎在这里不起作用。选择更改时,总是会创建一个新的 ViewModel,旧的可能不会关闭。
我不想滥用框架。也许我错过了什么。我希望有人能帮助我或给我提示,如何处理这个问题。
Catel 在视图模型卸载后立即调用保存/取消。如果您想在不更改数据模型的情况下进行“中间”保存,您可以:
- 保存将保存脏模型的主列表(您可以直接从您的虚拟机中修改模型)
- 创建自定义命令 (SaveData),您可以通过显式按钮(或输入手势绑定)运行 来保存数据,而无需在虚拟机上调用 SaveAsync
在之后,我目前结束了,不使用SaveViewModelAsync
和CancelViewModelAsync
方法并处理保存和我自己取消,这样通知就不会中断。我在 ViewModelBase
和 EditableObjectHelper.CancelEditObject(Model)
;
上使用 GetChildViewModels()
方法
我正在尝试在 Catel 中多次编辑 Master-Detail View。
我的问题 是,如果在 catel 中没有使用 SaveViewModelAsync
和 [=11= 来处理主从视图和多个版本的通用方法] 方法?
当我的 Master-ListItem 不是具有自己的 ViewModel 的 UserControl 并且当我在保存或取消后更改选定的 Master-ListItem 以便创建新的 ViewModel 时,工作流有效。但我不想在 save/cancel 之后取消或更改选择。另外,我可能要为 Master-ListItems 创建一个 UserControl + ViewModel。
题目限制条件:
我从 Geert van Horrik 的
- 不直接支持多次编辑循环
- 一个模型只能由一个视图模型访问
问题:
我只能使用 SaveViewModelAsync
和 CancelViewModelAsync
一次。之后,还活着的 ViewModels
- 不会从模型中获得任何更新
- 不要从数据创建备份,以便可以再次还原更改
重现代码:
我创建了一个 WPF Project,我在其中测试了所有内容。
可能的解决方案:
- 我可以使用EditableObjectHelper并自己处理
- 我必须在保存或取消后再次实例化 VewModel,就像它发生在我的示例代码中的选择更改一样
解的限制:
- 如果我对主视图的 ListItems 使用专门的 UserControl,则 2 个 ViewModel 正在查看 1 个模型。在
SaveViewModelAsync
之后,ViewModel 没有收到模型的任何通知。所以我也必须再次实例化这个 ViewModel。但我会打破 ViewModel-Model 的 1-1 关系。
我的结论:
看来,我必须实例化所有这些 ViweModels 并独自处理这个工作流。 ViewModelLifetimeManagement.PartlyManual
(CloseViewModelOnUnloaded
已过时)似乎在这里不起作用。选择更改时,总是会创建一个新的 ViewModel,旧的可能不会关闭。
我不想滥用框架。也许我错过了什么。我希望有人能帮助我或给我提示,如何处理这个问题。
Catel 在视图模型卸载后立即调用保存/取消。如果您想在不更改数据模型的情况下进行“中间”保存,您可以:
- 保存将保存脏模型的主列表(您可以直接从您的虚拟机中修改模型)
- 创建自定义命令 (SaveData),您可以通过显式按钮(或输入手势绑定)运行 来保存数据,而无需在虚拟机上调用 SaveAsync
在SaveViewModelAsync
和CancelViewModelAsync
方法并处理保存和我自己取消,这样通知就不会中断。我在 ViewModelBase
和 EditableObjectHelper.CancelEditObject(Model)
;
GetChildViewModels()
方法