Удалить действия «Повторить» в Memento?

В моем приложении пользователь может добавлять строки в DataGrid и изменять свойства каждой строки. Пользователь также может удалять строки. Это прекрасно работает, чтобы отменить и повторить эти действия, но если пользователь добавляет строки, скажем, три, изменяет некоторые значения, а затем отменяет обратно, где есть только одна строка, а затем добавляет новую строку, кажется нелогичным иметь возможность повторить отмену ( наличие новых строк после последней добавленной). Таким образом, когда пользователь добавляет новую строку, я хочу удалить все Redos.

Я попытался использовать RedoBatches, чтобы получить перечисление всех повторов, а затем сделать Clear для каждого, чтобы удалить их, но кнопка Redo все еще активна и будет повторять эти действия при нажатии.

Это правильный способ попытаться достичь этого или это невозможно, или я должен сделать это по-другому?


person Karl-Petter Åkesson    schedule 08.09.2014    source источник


Ответы (1)


При добавлении элементов с помощью объекта вы можете использовать UnregisterObject для отмены регистрации. Он также автоматически удалит пустые пакеты.

Другой хак - преобразовать свойства пакетов Undo / Redo в список ‹> и изменить их соответствующим образом (но обратите внимание, что в этом случае вы «возитесь» с внутренними компонентами).

person Geert van Horrik    schedule 09.09.2014
comment
Какой объект я должен отменить регистрацию? Пользователь добавляет строки 1, 2 и 3, затем отменяет добавление строки 3 и затем добавляет новую строку. Redo добавит четвертую строку. Но если я вместо этого отменю регистрацию объекта, содержащего строки, я потеряю этот повтор (как и хотел), но я также потеряю все отмены (добавление новой строки и строки 2 и 1) и те, которые я все еще хочу сохранить. Так что единственный вариант, который у меня есть, это начать возиться с внутренностями, верно? - person Karl-Petter Åkesson; 11.09.2014
comment
Или создайте PR, позволяющий очищать пустые партии. Я думаю, это довольно легко. - person Geert van Horrik; 11.09.2014
comment
Не понимаю, как это поможет мне удалить существующие Redos. Или я совершенно неправильно понял внутренности Memento? Насколько я понял, у Memento есть очереди Undo и Redo для каждого объекта, за которым он следит, и действия перемещаются между ними в очереди. - person Karl-Petter Åkesson; 12.09.2014
comment
Я имею в виду следующее: вы можете удалить элементы из пакета, но сам пакет останется в списке. Что вы можете сделать, так это общедоступный метод ClearEmptyBatches (или Cleanup или что-то еще), который очистит все пакеты без каких-либо действий. - person Geert van Horrik; 12.09.2014