使用MVVM模式C#进行实时编辑

时间:2016-01-04 17:49:55

标签: c# wpf design-patterns mvvm monogame

我目前正在开发一个工具来可视化WPF应用程序中的某些模型。

我的一个问题是使用MVVM模式的“实时编辑”问题。

在下面显示的屏幕中,我的MainWindow有一个面板,其中包含使用以下内容的MonoGame渲染:https://github.com/ShyroFR/MonoGame.Interop

问题是,当我要在“编辑”窗口中打开/关闭开关或其他控件时,我希望在MainWindow上进行更改。 如果我选择保留更改,确定,没问题,将进行更改,但如果我取消该版本,则应该再次返回先前版本。 (基本上只需要在之前进行保存...)

enter image description here

感谢您的帮助,祝您有个美好的一天,新年快乐:)

2 个答案:

答案 0 :(得分:2)

您应该考虑实施IEditableObjectIRevertibleChangeTracking这样的界面。两者都有助于概念化恢复变革的概念。关于this answer的一个很好的讨论。

尽管如此,两者仍然需要更深入地思考如何处理取消变化的内部因素。我认为主要阵营是“使用不可变对象方法”和“动作跟踪”。两者都有好处和权衡。

答案 1 :(得分:1)

命令处理器模式:http://wiki.hsr.ch/APF/files/CommandProcessor.pdfcommand pattern书中"Gang of Four" Design Patterns的变体。

这是创建'命令'对象的一种很好的方法(它还包含有关如何'撤消/反转'特定'命令'的指令,这种方式可以存储在堆栈中(无论你想要的任何深度)可能的'撤消'操作数。(你可以将它与你的MVVC模式融合在一起)

command pattern也是为了做到这一点,但我发现“命令处理器模式”对于如何实际实现更加“清晰”。 ('命令模式'似乎留给你实现。)