В общем, я пока остановился на такой реализации:
public int GetItemSortedPosition(int index, object sender)
{
IComparer comparer = GetSortComparer();
if (comparer == null)
return index;
if (_list.Count > 1)
for (int i = 0; i < _list.Count; i++)
if (i != index)
{
if (comparer.Compare(_list[i], sender) > 0)
{
if (i > 0)
return i - 1;
return i;
}
}
return _list.Count - 1;
}
ЗЫ: я не сказал в чём ошибка
Имеем отсортированный список. Значения поля, по которому идёт сортировка:
1, 1, 2, 3
Если производим замену объекта с индексом 0, на объект со значением поля 2, то он встанет по индексу 3, а должен по индексу 2.
Получается:
1, 2, 3, 2
А должно быть:
1, 2, 2, 3
Т. е. возвращается индекс на единицу больше правильного.
Замену объекта произвожу командой myBindingSource[0] = myObj;