gpt4 book ai didi

c# - 使用 MVVM 撤消/重做最佳实践

转载 作者:行者123 更新时间:2023-11-30 18:35:07 26 4
gpt4 key购买 nike

我主要从事绘图编辑器的工作,它允许您根据现有几何图形的关键点定义几何图形。然后用户可以添加一些关于他们刚添加的东西的信息,例如名称、预期大小等。我用来完成它的 API 是很棒的 Reversible。 API,但我希望问题超出我正在使用的 API。

基本上有几个问题我想澄清一下:

1) 如果您使用支持主/细节方式选择的应用程序支持撤消/重做,更改绘图对象的状态是否也会导致它被选中?示例是撤消操作更改了元素的名称,除非选择了该元素,否则该更改不会很明显。像这样的事情是否被认为是标准行为?

2) 在处理某些类型的增量更改(拖动框或使用数字微调器)时,将一组更改分组为单个用户交互(鼠标滑动或操作)似乎是标准形式释放微调按钮),但是在处理 MVVM 时,我目前只知道属性发生了变化,而不知道变化的来源。是否有一种标准方法可以让这些类型的交互在不完全分解模式的情况下传播到 View 模型?

最佳答案

如有疑问,最好的方法是查看操作系统控件和平台上其他应用程序的典型行为,以便与用户熟悉的内容保持一致。特别是与最常用的应用程序的一致性。如果您研究其他应用如何处理 UI 问题,您通常可以学到很多东西,尤其是关于您在自己的设计中可能没有考虑到的微妙情况。

1) 通常,撤消操作倾向于选择更改的项目,既突出显示更改的内容,又将用户的输入焦点移回上次编辑,以便他们可以继续。这对于文本之类的内容特别有效,因为如果您撤消/重做您键入的内容,您很可能想继续编辑刚刚撤消/重做的文本区域。您对 master/detail 的主要选择是只选择主对象,还是选择发生变化的精确细节。

2) 您的撤消管理器可以使用一些智能将类似的操作合并到一个撤消步骤中。例如,如果用户连续键入多个字符,它可能会注意到这些操作都很相似,并将它们连接成一个撤消步骤。它如何做到这一点取决于您如何存储和处理撤消,但是对于一个体面的面向对象设计,这应该是一个易于添加的选项(即询问撤消记录本身是否可以合并,以便您可以轻松添加新类型的将来撤消记录)。请注意,在一个步骤中累积太多更改可能会非常烦人,因此您可能会发现一个操作 = 1 个步骤的更懒惰的实现实际上比尝试太聪明可以获得更好的用户体验。我会从蛮力开始,只有当你发现你最终得到大量重复的撤消序列(比如 100 个单个像素向左移动而不是仅仅一个 100 像素跳跃)时才添加聚合

关于c# - 使用 MVVM 撤消/重做最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com