public static void ChangeListWithHistory <T>(this IHistoryViewModel vm, IList <T> source, IList <T> oldValue, IList <T> newValue)
        {
            if (vm.History != null)
            {
                void undo() => source = oldValue;
                void redo() => source = newValue;

                vm.History.Snapshot(undo, redo);
                source = newValue;
            }
        }
        public static void RemoveWithHistory <T>(this IHistoryViewModel vm, IList <T> source, T item)
        {
            if (vm.History != null)
            {
                int index = source.IndexOf(item);
                void redo() => source.RemoveAt(index);
                void undo() => source.Insert(index, item);

                vm.History.Snapshot(undo, redo);
                redo();
            }
        }
 public static void CreateSnapshot(this IHistoryViewModel vm, Action undo, Action redo)
 {
     vm.History?.Snapshot(undo, redo);
 }