Сортируемый BindingList <T>: путаница с RemoveSortCore - PullRequest
2 голосов
/ 16 апреля 2011

Я реализую свой собственный BindingList<T>, который поддерживает сортировку. Пока все работает хорошо, но я не совсем понимаю, как мне реализовать RemoveSortCore. Документация не очень понятна, она только говорит:

Удаляет любую сортировку, примененную с ApplySortCore, если сортировка реализована в производном классе

Значит ли это, что я должен восстановить первоначальный порядок предметов? Реализация, показанная в этой статье MSDN , только устанавливает _isSorted в ложь, фактически не восстанавливая первоначальный порядок, что делает его совершенно бесполезным, ИМХО ...

Если я хочу иметь возможность восстановить первоначальный порядок, я думаю, мне нужно сохранить копию исходной коллекции (или есть ли лучший способ?). Но если я это сделаю, как мне обрабатывать изменения коллекции, пока она сортируется?

  • При переопределении InsertItem я должен просто добавить новый элемент в конце несортированной копии?
  • При переопределении RemoveItem мне присваивается индекс в отсортированной коллекции. Но это означает, что если я хочу также удалить элемент из несортированной коллекции, мне нужно найти его исходное положение, которое представляет собой операцию O (n), в то время как RemoveItem обычно ожидается как операция O (1). Тот же вопрос относится и к SetItem.

Как бы вы справились с этим? Любые предложения приветствуются

1 Ответ

5 голосов
/ 17 апреля 2011

Разработчик должен точно определить, что это значит. Два наиболее очевидных варианта:

  1. Вернуть список к исходному виду: официальный пример здесь

  2. Удалите сортировку и продолжайте, как если бы она никогда не применялась: как используется в MS.SqlServer.Management.Controls.SortableBindingList

...