private TreeGridColumnCollectionChangedEventArgs InsertPreprocess(int index, TreeGridColumn column)
        {
            int count = this._stableColumns.Count;

            if (index < 0 || index > count)
            {
                throw new ArgumentOutOfRangeException("index");
            }
            if (column == null)
            {
                throw new ArgumentNullException("column");
            }
            if (column.StableIndex >= 0)
            {
                throw new InvalidOperationException("NotAllowShareColumnToTwoColumnCollection");
            }

            column.StableIndex = count;
            this._stableColumns.Add(column);
            this._stableIndices.Insert(index, column.StableIndex);

            InheritanceContextHelper.ProvideContextForObject(this._owner, column);

            column.PropertyChanged += this.ColumnPropertyChanged;

            return(new TreeGridColumnCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, column, index, count));
        }
 private void HookContext(DependencyObject oldOwner, DependencyObject newOwner)
 {
     if (newOwner != null)
     {
         foreach (var column in this._stableColumns)
         {
             InheritanceContextHelper.ProvideContextForObject(newOwner, column);
         }
     }
     else
     {
         foreach (var column in this._stableColumns)
         {
             InheritanceContextHelper.RemoveContextFromObject(oldOwner, column);
         }
     }
 }
        private TreeGridColumnCollectionChangedEventArgs RemoveAtPreprocess(int index)
        {
            this.VerifyIndexInRange(index, "index");

            int actualIndex = this._stableIndices[index];
            var column      = this._stableColumns[actualIndex];

            column.ResetPrivateData();
            column.PropertyChanged -= this.ColumnPropertyChanged;

            this._stableColumns.RemoveAt(actualIndex);

            this.UpdateIndicesOnRemoved(actualIndex, index);

            InheritanceContextHelper.RemoveContextFromObject(this._owner, column);

            return(new TreeGridColumnCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, column, index, actualIndex));
        }
        private TreeGridColumnCollectionChangedEventArgs ClearPreprocess()
        {
            var array = new TreeGridColumn[base.Count];

            if (base.Count > 0)
            {
                base.CopyTo(array, 0);
            }

            foreach (var column in this._stableColumns)
            {
                column.ResetPrivateData();
                column.PropertyChanged -= this.ColumnPropertyChanged;
                InheritanceContextHelper.RemoveContextFromObject(this._owner, column);
            }

            this._stableColumns.Clear();
            this._stableIndices.Clear();

            return(new TreeGridColumnCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset, array));
        }