public void UndoChanges()
 {
     foreach (var editable in ChangedItems.ToArray())
     {
         editable.UndoChanges();
     }
     foreach (var deleted in DeletedItems.ToArray())
     {
         deleted.UndoChanges();
     }
     _inserted.Clear();
 }
        public TElement[] CommitChanges()
        {
            var results = new List <TElement>();

            foreach (var editable in ChangedItems.ToArray())
            {
                editable.CommitChanges();
                results.Add(editable.Original);
            }
            foreach (var inserted in Inserted.ToArray())
            {
                inserted.CommitChanges();
                results.Add(inserted.Original);
            }
            _inserted.Clear();

            return(results.ToArray());
        }