コマンド パターンと、各コマンドの取り消しアクションを使用しています。私のビューは、ビューモデルを介してコマンドにバインドされています。
例コード:
XAML:
<Button Command="{Binding MyCommand}">
ビューモデル:
public class ViewModel : UndoRedoClass
{
public ViewModel()
{
MyCommand = new MyCommand(this);
}
public ICommand {get;private set;}
}
UndoRedoClass
public class UndoRedoClass
{
private Stack<IUndoCommand> undoCommands;
//...
ExecuteCommand(IUndoCommand cmd)
{
undoCommands.push(cmd);
cmd.Execute();
}
}
したがって、コマンドを一般的に呼び出しViewModel.ExecuteCommand(cmd)
て、元に戻すスタックに正しくプッシュすることができます。イベントを使用する場合、ViewModel の ExecuteCommand メソッドを使用して実際に変更を実行できるため、これは問題ありません。ただし、ビューからコマンドを呼び出すためにコマンドをプロパティとして提供すると、それらはスタックに追加されず、もちろん実行されます。
問題は、実行されたコマンドを元に戻すスタックのどこにプッシュするかです。