public abstract bool TryMerge(TextUndoMetadata previousMetadata); 
            public override bool TryMerge(TextUndoMetadata previousMetadata)
            {
                var previousSelection = previousMetadata as SelectionUndoMetadata;

                if (previousSelection == null)
                {
                    // Can't merge -- previous metadata must be one of us
                    return false;
                }

                // Merge is simple -- just carry along the original OldSelection value
                this.OldSelection = previousSelection.OldSelection;
                return true;
            }
 public abstract bool TryMerge(TextUndoMetadata previousMetadata);