C# MVVM指示灯和撤消/重做?

C# MVVM指示灯和撤消/重做?,c#,wpf,design-patterns,mvvm-light,C#,Wpf,Design Patterns,Mvvm Light,我可能在这里混淆了一些责任(甚至术语),但我不能完全理解这一点 命令模式和MVVM Light中的命令(因此也包括WPF中的命令)之间是否存在任何关系?我真的很想实现某种撤销/重做机制,但不太清楚是否有一种“MVVM轻松方式”可以实现 如果这与MVVM Light无关,那么我如何通过不使用MVVM Light WPF来使用“原始”中的撤消/重做命令?我恐怕不知道MVVM或WPF中有任何固有的撤消/重做功能 MVVM Light是一个非常好的轻量级工具包,仅用于快速实现MVVM。任何附加模式都必须

我可能在这里混淆了一些责任(甚至术语),但我不能完全理解这一点

命令模式和MVVM Light中的命令(因此也包括WPF中的命令)之间是否存在任何关系?我真的很想实现某种撤销/重做机制,但不太清楚是否有一种“MVVM轻松方式”可以实现


如果这与MVVM Light无关,那么我如何通过不使用MVVM Light WPF来使用“原始”中的撤消/重做命令?

我恐怕不知道MVVM或WPF中有任何固有的撤消/重做功能


MVVM Light是一个非常好的轻量级工具包,仅用于快速实现MVVM。任何附加模式都必须自己实现。

MVVM Light和WPF中的命令通常是一种将任意功能集封装在单个对象和接口中的方法,并连接任意数量的UI元素以执行该操作

这些命令可以合并到undo/redo功能的命令模式实现中,但您需要更多

您可以滚动自己的命令堆栈,这是我在当前WPF项目(使用Prism)中采用的路径

基本上,这是一种思维方式的转变,用户可以通过UI进行任何更改

  • 被包装在命令中
  • 具有相应的撤消命令
  • 被推到堆栈中

  • 还有一些开源项目可以提供帮助,其中包括Visual Studio团队成员Kirill Osenkov的一个附带项目。

    我为WPF应用程序实现了撤销/重做,并将撤销/重做代码发布到

    我考虑尝试使用命令模式封装逻辑的推荐方法。从纸面上看似乎不错,但在我的例子中,弄清楚如何将每个操作都放入一个可以可靠地撤消/重做一组更改的命令中似乎非常具有挑战性。相反,我采取的方法是“监视”底层模型的更改,然后将这些更改存储在撤消堆栈中。这有点像命令模式,但采用“自下而上”的方法。撤消操作因更改模型而“失效”

    通过截取模型的setter中的更改来收集操作,将它们存储到一个带有代理的更改单元中,用于撤消/重做更改,然后将其放在更改堆栈中。MUF库包括用于管理堆栈、创建更改单元等的逻辑

    欢迎在codeplex网站()上发表评论和提出问题。您还可以在那里找到完整的文档和示例应用程序


    你也可以通过NuGet获得它。只需查找“MUF”或“受监视的撤消框架”。它包括对Silverlight 4.0、以及.NET 3.5、4.0和WP7的支持。

    你好,Nathan,感谢您提供该库。我的对象需要是不可变的吗?