public void Redo()
{
if (!CanRedo) throw new InvalidOperationException("There is nothing to redo");
if (IsInBatch) throw new InvalidOperationException("Finish the active batch first");
var @event = _redoStack.Pop();
RollbackEvent(@event is BatchEvent ? new BatchEvent((BatchEvent) @event) : @event, false);
NotifyChange(@event);
}