【问题标题】:c# command pattern design issuec#命令模式设计问题
【发布时间】:2016-08-25 13:09:43
【问题描述】:

亲爱的,

我有对象模型,其成员(对象)属性可以通过 PropertyGrid 和 UI(PopupMenu 等)进行更改。在这种情况下,我正在寻找对 UndoRedo 的支持以及对命令模式感兴趣的设计。据我了解,通过 PropertyGrid 更改任何属性都应该在 UndoRedo 堆栈中注册,但是,撤消此操作等于将该属性更改为旧值 - 和无限循环?你知道在这种情况下有什么最佳做法吗?

谢谢。

【问题讨论】:

  • 我想知道您是否可以改写您的问题,因为我不清楚您到底在寻找什么。您是否想了解应该如何实现撤消/重做实现的命令模式?如果您已经有某种实现,我希望看到它,这样我可以更好地了解您在实现它方面的进展情况。

标签: c# undo-redo command-pattern


【解决方案1】:

我想撤消操作不必算作更改。

您有一个更改集合。当您进行更改时,您会在此集合中添加一个项目。如果您进行撤消,您只需将当前状态与 [i-1] 状态交换。如果您进行重做,则将当前状态与 [i+1] 状态交换。如果您做了一些撤消操作,然后进行更改,您将从那里开始编写并重写所有可能的重做操作。

【讨论】: