Executing individual undo edits

Is it possible to extract GoUndoManagerCompoundEdit objects in the CommitCompoundEdit method, and then use the GoUndoManagerCompoundEdit object to execute undo operations in an external undo manager ?
That is, could something like:
GoChangedEventArgs[] a = new GoChangedEventArgs[cedit.AllEdits.Count];
for (int i = 0; i < a.Length; i++)
GoChangedEventArgs o = (GoChangedEventArgs)a;
be the way foward ?
I am writing an application where GoDiagram shows the state of an datamodel (a strongly typed dataset). The application supports undoing and redoing of edits to the datamodel. For most operations I handle undo through the datamodel, ie. it changes its state and raises a change event which is handled so by a GoDiagram controller class which updates the diagram (GoDiagram is a view in a MVC pattern). But certain actions such as moving objects in the Godiagram must be undone using the GoDiagram undo manager, because positions in a godiagram is not represented in the datamodel (the model does not care how a view is displaying its data.) and therefore GoDiagram is the only component knowing anything about positions and layout, so these actions must be handled by the GoDiagram Undo manager.
So I have an undomanager with a stack of elements, where I want some of them to encapsulata compoundedits, which I then some how ‘execute’ on a document.
Hopes this makes sense.
Stig Nielsson

The application architecture you describe is fairly common. I think most programmers that use a GoDocument as a “view” onto their own “model” extend the GoDiagram undo/redo mechanisms for keeping track of their own model’s state changes. GoDiagram’s undo/redo is meant to be general and extensible. You just need to implement IGoUndoableEdit, just as GoChangedEventArgs does for GoDocument/GoObject state.
But there isn’t any reason you couldn’t use an existing undo/redo mechanism if your application already has its own. Instead of calling GoDocument.ChangeValue, you should call IGoUndoableEdit.Undo() or IGoUndoableEdit.Redo(), depending on which way you want to go.