【问题标题】:Remove Redo actions in Memento?删除 Memento 中的重做操作?
【发布时间】:2014-09-08 07:43:32
【问题描述】:

在我的应用程序中,用户可以向 DataGrid 添加行并更改每行的属性。用户还可以删除行。撤消和重做这些操作可以正常工作,但是如果用户添加行,比如三行,修改一些值,然后撤消回只有一行的位置,然后添加新行,那么能够重做撤消似乎不合逻辑(在最后添加的行之后出现新行)。因此,当用户添加新行时,我想删除所有重做。

我尝试使用 RedoBatches 获取所有重做的枚举,然后对每个重做执行清除以删除它们,但重做按钮仍然处于活动状态,并且在按下时将重做这些操作。

这是尝试实现这一目标的正确方法,还是不可能,或者我应该采取不同的做法?

【问题讨论】:

    标签: catel memento


    【解决方案1】:

    当使用对象添加项目时,您可以使用 UnregisterObject 来取消注册。它也会自动删除空批次。

    另一个技巧是将 Undo / Redo 批处理属性转换为 List 并相应地修改它们(但请注意,在这种情况下,您是在“弄乱”内部结构)。

    【讨论】:

    • 我应该注销哪个对象?用户添加第 1、2 和 3 行,然后撤消添加第 3 行,然后添加新行。重做将添加第四行。但是,如果我取消注册包含行的对象,我将取消该重做(根据需要),但我也会取消所有撤消操作(添加新行和第 2 行和第 1 行)以及我仍想保留的那些。所以我唯一的选择就是开始“搞乱”内部结构,对吧?
    • 或者创建一个允许清除空批次的 PR。我认为这很容易。
    • 不明白这将如何帮助我删除现有的重做。还是我完全误解了 Memento 的内部结构?据我了解,Memento 对其监控的每个对象都有一个撤消和重做队列,并且动作在这些对象之间移动到队列中。
    • 我的意思是:您可以从批次中删除项目,但批次本身仍会在列表中。您可以做的是一个公共方法 ClearEmptyBatches(或 Cleanup,或其他),它将清除所有批次而不进行操作。
    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    相关资源
    最近更新 更多