我正在使用命令模式,以及每个命令的撤消操作。我的视图通过视图模型绑定到命令。
示例代码:
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 方法来执行更改。但是,如果我将命令作为属性提供,从视图中调用它们,它们当然不会被添加到堆栈中而只是被执行。
现在的问题是,我在哪里将执行的命令推送到撤消堆栈上?