Esempio n. 1
0
        private bool ToggleColumnSort(ColumnBase column, bool resetSort)
        {
            ToggleColumnSortCommand.ThrowIfNull(column, "column");

            this.ValidateToggleColumnSort();

            using (var synchronizationContext = this.StartSynchronizing(this.GetSortDescriptionsSyncContext()))
            {
                this.ValidateSynchronizationContext(synchronizationContext);

                using (var disposer = new Disposer())
                {
                    this.DeferRestoreStateOnLevel(disposer);

                    // This will ensure that all DataGridCollectionViews mapped to the SortDescriptions collection will only refresh their sorting once!
                    var sortDescriptions = this.SortDescriptions;
                    disposer.Add(this.DeferResortHelper(sortDescriptions), DisposableType.DeferResort);

                    var    newSortDirection = ToggleColumnSortCommand.GetNextSortDirection(column.SortDirection);
                    string columnName       = column.FieldName;
                    int    insertionIndex;

                    if ((resetSort) &&
                        ((column.SortIndex == -1) || (sortDescriptions.Count > 1)))
                    {
                        insertionIndex = 0;

                        if (sortDescriptions.Count > 0)
                        {
                            sortDescriptions.Clear();
                        }

                        Debug.Assert(sortDescriptions.Count == 0);
                    }
                    else
                    {
                        for (insertionIndex = 0; insertionIndex < sortDescriptions.Count; insertionIndex++)
                        {
                            if (sortDescriptions[insertionIndex].PropertyName == columnName)
                            {
                                break;
                            }
                        }
                    }

                    if (insertionIndex < sortDescriptions.Count)
                    {
                        if (newSortDirection == SortDirection.None)
                        {
                            sortDescriptions.RemoveAt(insertionIndex);
                        }
                        else
                        {
                            sortDescriptions[insertionIndex] = new SortDescription(columnName, ToggleColumnSortCommand.Convert(newSortDirection));
                        }
                    }
                    else if (newSortDirection != SortDirection.None)
                    {
                        sortDescriptions.Add(new SortDescription(columnName, ToggleColumnSortCommand.Convert(newSortDirection)));
                    }
                }
            }

            return(true);
        }