public void Undo() { if (!CanUndo) throw new InvalidOperationException (); var command = m_undoStack.Pop (); command.Undo (); if (command.CanRedo) m_redoStack.Push (command); if (Changed != null) Changed (this, new EventArgs ()); }