private bool CheckNeedReset(GridColumn masterCol, GridColumn detailCol)
        {
            int key = detailCol.VisibleIndex;

            GridColumn storedMasterColumn = null;
            GridColumn storedDetailColumn = null;

            masterColumns.TryGetValue(key, out storedMasterColumn);
            detailColumns.TryGetValue(key, out storedDetailColumn);

            if (masterCol == null && storedMasterColumn != null)
            {
                DependencyPropertyDescriptor.FromProperty(GridColumn.VisibleProperty, typeof(GridColumn)).RemoveValueChanged(storedMasterColumn, OnMasterColumnVisibleChanged);
                return(true);
            }

            if (storedDetailColumn == null)
            {
                return(true);
            }

            if (masterCol.GetHashCode() != storedMasterColumn.GetHashCode() || detailCol.GetHashCode() != storedDetailColumn.GetHashCode())
            {
                DependencyPropertyDescriptor.FromProperty(GridColumn.VisibleProperty, typeof(GridColumn)).RemoveValueChanged(storedMasterColumn, OnMasterColumnVisibleChanged);
                DependencyPropertyDescriptor.FromProperty(GridColumn.VisibleProperty, typeof(GridColumn)).RemoveValueChanged(storedDetailColumn, OnDetailColumnVisibleChanged);
                return(true);
            }

            return(false);
        }