0

我正在使用命令模式,以及每个命令的撤消操作。我的视图通过视图模型绑定到命令。

示例代码:

XAML:

<Button Command="{Binding MyCommand}">

视图模型:

public class ViewModel : UndoRedoClass
{
    public ViewModel()
    {
        MyCommand = new MyCommand(this);
    }

    public ICommand {get;private set;}
}

UndoRedo类

public class UndoRedoClass
{
    private Stack<IUndoCommand> undoCommands;

    //...

    ExecuteCommand(IUndoCommand cmd)
    {
        undoCommands.push(cmd);
        cmd.Execute();
    }
}

所以我通常可以调用命令,通过ViewModel.ExecuteCommand(cmd)这些命令正确地推送到我的撤消堆栈。如果我使用事件,这没问题,因为我可以在那里使用 ViewModel 的 ExecuteCommand 方法来执行更改。但是,如果我将命令作为属性提供,从视图中调用它们,它们当然不会被添加到堆栈中而只是被执行。

现在的问题是,我在哪里将执行的命令推送到撤消堆栈上?

4

1 回答 1

0

为您派生一个新ICommand类型,在UndoableCommand内部处理撤消/重做并将依赖项注入您的撤消/重做服务。将这些 UndoableCommands 作为 VM 的属性。

于 2013-04-19T14:05:56.420 回答