Я понимаю, что это не прямой ответ на ваш вопрос, но вы можете рассмотреть возможность использования шаблона команд для реализации стека отмены / возврата.
Инкапсуляция изменений в командах - это очень аккуратный способ циклического / повторного цикла изменений, с дополнительными преимуществами (1) приятной функции, которая добавляет ценность приложению, (2) вы можете обернуть множество действий в любой заданный команда, например, получение уведомлений об изменении события для поддержки привязки данных в направлениях do и undo.
Кроме того, управление изменениями коллекции не более или менее сложно, чем простые обновления свойств.
Специфично для размещенного вами кода, реализация OnPropertyChanged
никогда не вызовет событие PropertyChanged
, потому что вы вызываете return
после оператора if()
, а затем снова в пустых скобках (они не соответствуют if
состояние).
if (PropertyChanged == null) return; // this returns based on if
{
return; // this returns no matter what
}
Кроме того, кажется, что пользователь никогда не увидит никаких изменений в пользовательском интерфейсе. Значения не обновляются до тех пор, пока не будет вызван ApplyChanges
, а когда это произойдет, события PropertyChanged
не будет. (Возможно, я не правильно следую вашему коду, но просто просматривая его, похоже, это так).