Я работал над приложением WPF, которое включает перемещение множества фигур. Это в основном MVVM и сильно зависит от команд. До недавнего времени я не беспокоился об Undo / Redo. Я не думаю, что это будет слишком сложно, поскольку большинство моих изменений связаны с командами, которые наследуют базовый класс CommandBase, реализующий ICommand.
Пока что я добавил еще один интерфейс с именем IUndoCommand, который использует ICommand. Я добавил метод отмены, который будет выполнять операции, необходимые при вызове отмены.
Я буду использовать стек как для Undo, так и для Redo, но у меня возникла проблема с параметрами для методов Execute / Undo. Есть ли правильный способ сохранить эти параметры объекта типа? Целесообразно ли добавлять поле / метод в IUndoCommand? Если да, я должен установить его в методе Execute или в конструкторе (если я вообще могу).
Если нет, я должен передать его как собственный объект в стеке?
Во-вторых, (хотя, вероятно, это может быть ваш собственный вопрос) есть ли лучшая структура данных для отслеживания нескольких команд? В настоящее время у меня есть цикл, который запускает несколько команд для перемещения нескольких выбранных фигур, и я хотел бы разрешить одну отмену, чтобы отменить их все. Думаю, я мог бы преобразовать это в команду самостоятельно и передавать ей команды, но опять же, я новичок в этом и предпочел бы сделать это правильно.
Спасибо за чтение, и любая помощь будет принята с благодарностью.
Источники: