0

私は多くの形状の移動を伴うWPFアプリケーションに取り組んできました。これは主にMVVMであり、コマンドに大きく依存しています。つい最近まで、Undo/Redoについて心配していませんでした。私の変更のほとんどは、ICommandを実装する基本クラスCommandBaseを継承するコマンドを含むため、それほど難しくはないと思います。

これまでに、ICommandを使用するIUndoCommandという名前の別のインターフェイスを追加しました。元にたりが呼び出されたときに必要な操作を実行する元に戻るメソッドを追加しました。

UndoとRedoの両方にスタックを使用しますが、Execute/Undoメソッドのパラメーターに問題が発生しています。オブジェクト型のこれらのパラメータを保存する適切な方法はありますか?IUndoCommandにフィールド/メソッドを追加することをお勧めしますか?もしそうなら、私はそれをExecuteメソッドまたはコンストラクターで設定する必要があります(可能であれば)。

そうでない場合は、スタック内の独自のオブジェクトとして渡す必要がありますか?

第二に、(これはおそらくそれ自身の質問かもしれませんが)複数のコマンドを追跡するためのより良いデータ構造はありますか?現在、複数のコマンドを実行して複数の選択した図形を移動するループがあり、1回の取り消しですべてを元に戻すことができます。これを独自のコマンドに変換してコマンドを渡すこともできると思いますが、これも初めてで、正しく実行したいと思います。

読んでくれてありがとう、そしてどんな助けでも大歓迎です。

出典:

コードプロジェクトVisualStudioMagazineStackOverFlow

4

1 に答える 1

1

インターフェイスはデータにアクセスする必要がないため(Undo()/Redo()メソッドのペアが必要であり、元に戻すことができるかどうかのフラグが必要になる可能性があります)、パラメーターについてまったく知る必要はありません。

1つのオプションは、実装をIUndoCommand汎用にすることです。次に、これを使用して、タイプセーフな方法でパラメーターを保管できます。

CommandBaseその場合、クラスはジェネリックになります。つまり、次のようになります。

class CommandBase<T> : ICommand, IUndoCommand
{
    // You could then store the parameter directly...
    public T Parameter { get; private set; }
}
于 2013-02-01T18:29:56.893 に答える