/// <summary> /// プロパティ配列変更前の処理 /// </summary> protected virtual void OnDataPropertyCollectionChanging(DataPropertyCollectionChangingEventArgs <T> e) { if (DataPropertyCollectionChanging != null || _DataPropertyCollectionChanging != null) { using (BlockReentrancy()) { DataPropertyCollectionChanging?.Invoke(this, e); _DataPropertyCollectionChanging?.Invoke(this, e); } } }
/// <summary> /// 交換の操作 /// </summary> protected virtual void SwapItem(int index0, int index1) { CheckReentrancy(); var operation = GenerateSwapOperation(index0, index1); var e = new DataPropertyCollectionChangingEventArgs <T>(this, operation); OnDataPropertyCollectionChanging(e); if (!e.Cancel) { if (Execute(e.Operations)) { OnDataPropertyCollectionChanged(new DataPropertyCollectionChangedEventArgs <T>(this, e.Operations, e.InputOperations)); } } }
/// <summary> /// 移動の操作 /// </summary> protected virtual void MoveItem(int oldIndex, int newIndex) { CheckReentrancy(); var operation = GenerateMoveOperation(oldIndex, newIndex); var e = new DataPropertyCollectionChangingEventArgs <T>(this, operation); OnDataPropertyCollectionChanging(e); if (!e.Cancel) { if (Execute(e.Operations)) { OnDataPropertyCollectionChanged(new DataPropertyCollectionChangedEventArgs <T>(this, e.Operations, e.InputOperations)); } } }
/// <summary> /// 連続削除の操作 /// </summary> protected virtual void RemoveItems(int index, int count) { if (items.Any()) { CheckReentrancy(); var operations = new List <DataPropertyCollectionChangeOperation <T> >(Enumerable.Range(index, count).Reverse().Select(_ => GenerateRemoveOperation(_))); var e = new DataPropertyCollectionChangingEventArgs <T>(this, operations); OnDataPropertyCollectionChanging(e); if (!e.Cancel) { if (Execute(e.Operations)) { OnDataPropertyCollectionChanged(new DataPropertyCollectionChangedEventArgs <T>(this, e.Operations, e.InputOperations)); } } } }
/// <summary> /// 連続設定の操作 /// </summary> protected virtual void SetItems(int index, IEnumerable <T> values) { if (items.Any()) { CheckReentrancy(); var operations = new List <DataPropertyCollectionChangeOperation <T> >(); foreach (var value in values) { operations.Add(GenerateSetOperation(index++, value)); } var e = new DataPropertyCollectionChangingEventArgs <T>(this, operations); OnDataPropertyCollectionChanging(e); if (!e.Cancel) { if (Execute(e.Operations)) { OnDataPropertyCollectionChanged(new DataPropertyCollectionChangedEventArgs <T>(this, e.Operations, e.InputOperations)); } } } }