public static void Run() { // Goto equi CurrentElement.Element = Example.Instance.mEqui; // set a a mark and then change a database value UndoTransaction trans = UndoTransaction.GetUndoTransaction(); trans.StartTransaction("My Transaction"); String s1 = Example.Instance.mEqui.GetString(DbAttributeInstance.DESC); String s2 = String.Concat(s1, "x"); Example.Instance.mEqui.SetAttribute(DbAttributeInstance.DESC, s2); trans.EndTransaction(); // now restore old value UndoTransaction.PerformUndo(); String s3 = Example.Instance.mEqui.GetString(DbAttributeInstance.DESC); // restore new values UndoTransaction.PerformRedo(); String s4 = Example.Instance.mEqui.GetString(DbAttributeInstance.DESC); // Add in a subscriber ExampleUndoSubscriber subscriber = new ExampleUndoSubscriber(); UndoCaretaker.RegisterUndoSubscriber(subscriber); // set an initial value s1 = "Initial setting"; s2 = "New setting"; ExampleUndoSubscriber.val = s1; // Now do a transaction trans.StartTransaction("My Transaction"); ExampleUndoSubscriber.val = s2; trans.EndTransaction(); // restore old value UndoTransaction.PerformUndo(); // restore new value UndoTransaction.PerformRedo(); UndoCaretaker.RemoveUndoSubscriber(subscriber); }