undo;redo;command pattern;stack;change tracking;save boundaries;navigation;async;dotnet;csharp;library;ui integration;command merging;composite commands;events;visualization