Я пытаюсь реализовать функциональность Undo/Redo для узлов дерева в С# (компонент treeView). Я использовал шаблон сувенира, но у меня возникли проблемы с частью Redo. Я не вижу, где моя логика ошибочна. Вот несколько фрагментов кода
private List<Memento> _mementoStateList= new List<Memento>();
private List<Memento> _undoStateList= new List<Memento>();
public Memento Memento { get{return null;}
set{_mementoStateList.Add(value);} }
public Memento Undo()
{
if (!_mementoStateList.Any()) return null;
Memento m = _mementoStateList.Last();
_undoStateList.Add(m);
_mementoStateList.Remove(m);
return m;
}
public Memento Redo()
{
if (!_undoStateList.Any()) return null;
Memento m = _undoStateList.Last();
_mementoStateList.Add(m);
_undoStateList.Remove(m);
return m;
}
В моей форме перед удалением узла я вызываю метод SaveMemento(), который создает новый объект Memento, представляющий текущее состояние. Объект добавляется в _mementoStateList.
При отмене и повторении действия я вызываю описанные выше методы Undo() и Redo().
Я предполагаю, что не сохраняю состояния в нужный момент? Любой вклад высоко ценится!