我目前正在开发一个工具来可视化WPF应用程序中的某些模型。
我的一个问题是使用MVVM模式的“实时编辑”问题。
在下面显示的屏幕中,我的MainWindow有一个面板,其中包含使用以下内容的MonoGame渲染:https://github.com/ShyroFR/MonoGame.Interop
问题是,当我要在“编辑”窗口中打开/关闭开关或其他控件时,我希望在MainWindow上进行更改。 如果我选择保留更改,确定,没问题,将进行更改,但如果我取消该版本,则应该再次返回先前版本。 (基本上只需要在之前进行保存...)
感谢您的帮助,祝您有个美好的一天,新年快乐:)
答案 0 :(得分:2)
您应该考虑实施IEditableObject
或IRevertibleChangeTracking
这样的界面。两者都有助于概念化恢复变革的概念。关于this answer的一个很好的讨论。
尽管如此,两者仍然需要更深入地思考如何处理取消变化的内部因素。我认为主要阵营是“使用不可变对象方法”和“动作跟踪”。两者都有好处和权衡。
答案 1 :(得分:1)
命令处理器模式:http://wiki.hsr.ch/APF/files/CommandProcessor.pdf是command pattern书中"Gang of Four" Design Patterns的变体。
这是创建'命令'对象的一种很好的方法(它还包含有关如何'撤消/反转'特定'命令'的指令,这种方式可以存储在堆栈中(无论你想要的任何深度)可能的'撤消'操作数。(你可以将它与你的MVVC模式融合在一起)
command pattern也是为了做到这一点,但我发现“命令处理器模式”对于如何实际实现更加“清晰”。 ('命令模式'似乎留给你实现。)