0

コマンド パターンと、各コマンドの取り消しアクションを使用しています。私のビューは、ビューモデルを介してコマンドにバインドされています。

例コード:

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 メソッドを使用して実際に変更を実行できるため、これは問題ありません。ただし、ビューからコマンドを呼び出すためにコマンドをプロパティとして提供すると、それらはスタックに追加されず、もちろん実行されます。

問題は、実行されたコマンドを元に戻すスタックのどこにプッシュするかです。

4

1 に答える 1

0

ICommand元に戻す/やり直しを内部で処理する新しいタイプを派生させUndoableCommand、依存関係を元に戻す/やり直しサービスに注入します。これらの UndoableCommands を VM のプロパティとして使用します。

于 2013-04-19T14:05:56.420 に答える