Ruby эквивалент в мире Красивому Супу является why_the_lucky_stiff Hpricot.
К сожалению, ничто в BindingList не вызовет событие ListChanged с ListChangedType, установленным в ListChangedType.ItemMoved. BindingList наследуется от Collection, которое не обеспечивает никакой поддержки для «перемещения» элементов в списке. BindingList также не добавляет никакой поддержки для этого типа поведения.
Если вам действительно нужно / вы хотите отвечать на события ListChangedType.ItemMoved, лучшим вариантом является создание собственного класса из BindingList и предоставление собственных методов Move. Внутри этих методов вам необходимо временно приостановить создание событий ListChanged, выполнить перемещение путем удаления / добавления, самостоятельно вызвать событие ListChanged с помощью соответствующего ItemMoved ListChangedType, а затем отменить приостановку создания событий ListChanged.
Это будет выглядеть примерно так *:
public class CustomBindingList<T> : BindingList<T>
{
public void Move(T item, int index)
{
bool raiseListChangedEvents = this.RaiseListChangedEvents;
try
{
this.RaiseListChangedEvents = false;
int oldIndex = this.IndexOf(item);
this.Remove(item);
this.InsertItem(index, item);
this.OnListChanged(new ListChangedEventArgs(ListChangedType.ItemMoved, index, oldIndex));
}
finally
{
this.RaiseListChangedEvents = raiseListChangedEvents;
}
}
}
* Полностью непроверенный код,
Он срабатывает, если к нему применен источник привязки, если вы изменяете и данные, которые хранятся в поле сортировки, а затем изменяете положение записи, то событие срабатывает.