使用编辑范围

UsingEditingScope 示例演示如何对一组更改进行批处理,以便可以在单个原子单元中撤消这些更改。 默认情况下,活动设计器作者采取的操作会自动集成到撤消/重复系统中。

演示

编辑范围域和撤消/重做。

讨论

此示例演示如何在一个工作单元中对针对 ModelItem 树的一组更改进行批处理。 请注意,当直接从 WPF 设计器绑定到 ModelItem 值时,更改将自动应用。 使用命令式代码时,该示例展示了如何在需要批量处理多个更改而不是单个更改时进行操作。

在此示例中,添加了三个活动。 当编辑开始时,对 BeginEdit 的实例调用 ModelItem。 将对在此编辑范围中对 ModelItem 树所做的更改进行批处理。 该 BeginEdit 命令返回一个可用于控制此实例的命令 EditingScope。 可以调用 OnComplete 提交编辑范围或调用 OnRevert 还原编辑范围。

还可以嵌套 EditingScope 对象,这样就可以将多个更改集作为较大编辑范围的一部分进行跟踪,并且可以单独控制。 一种可能使用此功能的场景是,必须分别提交或还原来自多个对话框的更改,并将所有更改视为单个原子操作。 在此示例中,使用 ObservableCollection<T> 类型的 ModelEditingScope 来对编辑范围进行堆栈处理。 使用 ObservableCollection<T> 的目的是为了能够在设计器图面上观察到嵌套的深度。

设置、生成和运行示例

  1. 生成并运行示例,然后使用左侧的按钮修改工作流。

  2. 单击“ 打开编辑范围”。

    1. 此命令调用 BeginEdit 创建编辑范围并将其推送到编辑堆栈。

    2. 然后将三个活动添加到选定的 ModelItem 中。 请注意,如果尚未使用 BeginEdit 打开编辑范围,则这三个新活动将会显示在设计器画布上。 因为此操作仍然在 EditingScope 中挂起,所以不会更新设计器。

  3. 按“关闭编辑范围”可提交编辑范围。 三个活动出现在设计器中。