Войти



Поиск

Реклама

Полезное:

Новые статьи

Опечатка?

Выделите текст и нажмите Shift+Enter.
И мы в ближайшее время ее исправим!

Счетчики


Переопределение isSortedCore

Если значения свойства не реализуют IComparer, но метод Equals значения говорит, что оно равно другому объекту, то Compare возвращает О, сообщая о равенстве. Наконец, если ни одна из проверок не удалась, значения свойства преобразуются в строки и строковые представления сравниваются при помощи CompareTo, который реализует класс String. Самое последнее, что делает метод - проверяет направление сортировки, и если оно указывает на нисходящую сортировку, он умножает возвращаемое значение на -1, чтобы обратить смысл отношений больше/меньше.

Чтобы производить сортировку из вашего класса BindingListview<T>, вам необходимо предусмотреть переопределения всех относящихся к сортировке методов и свойств базового класса.

Добавления к классу включают в себя следующее:

Переопределение isSortedCore, которое указывает, сортирована ли в настоящий момент коллекция.

Переопределение SortDirectionCore, которое указывает направление сортировки.

Переопределение SortPropertyCore, которое указывает, по какому свойству производится сортировка.

Переопределение метода AppiySortCore, который устанавливает вышеперечисленные свойства, когда вызывается из базового класса в ответ на вызов IBindingList .ApplySort. Метод делегирует вызов вспомогательному методу ApplySortinternal для выполнения основной работы по сортировке.

Переопределение метода RemoveSortCore, который соответствующим образом восстанавливает свойства, когда вызывается из базового класса в ответ на вызов IBindingList .RemoveSort.

Объявление переменной типа List<T> для сохранения несортированной коллекции при применении сортировки.

Метод ApplySortCore создает объект SortComparer для специфицированных свойства и направления сортировки и передает его вспомогательному методу ApplySortlnternal. Метод ApplySortlnternal проверяет несортированную коллекцию, была ли она заполнена, и если нет, добавляет в нее все текущие объекты в том порядке, как они расположены в коллекции на момент вызова ApplySort. Проверка заполнения списка необходима на тот случай, если список уже сортировался несколько раз подряд. Затем метод приводит коллекцию Items, унаследованную вашим классом, к ссылке типа List<T> и вызывает ее метод Sort, передавая объект SortComparer. В результате элементы коллекции, поддерживаемой базовым классом, сортируются в соответствии с критерием, переданным классу SortComparer, и логикой сравнения, реализованной в этом классе. Наконец, метод ApplySortlnternal устанавливает флаг, показывающий, что коллекция сортирована, и запускает событие через вызов метода OnListChanged, показывая, что список изменился. Наиболее подходит тип изменения set, поскольку в принципе каждый элемент коллекции мог переместиться.

Метод RemoveSortCore очищает текущую коллекцию и заново заполняет ее значениями, сохраняемыми в списке исходной коллекции. Затем он очищает этот список и соответствующим образом устанавливает используемые алгоритмом переменные, показывая, что в данный момент никакой сортировки не применяется.

Чтобы нельзя было изменять элементы списка, когда коллекция сортирована, вам нужно переопределить реализации соответствующих элементов IBindingList:




Newer news items:
Older news items:

 
Главная Страница Контактная Информация Поиск по сайту Контактная Информация Поиск по сайту