Что вызывает ListChangedType. Событие ItemMoved ListChange в BindingList <T>?

Ruby эквивалент в мире Красивому Супу является why_the_lucky_stiff Hpricot.

12
задан Eric Anastas 6 August 2009 в 04:31
поделиться

2 ответа

К сожалению, ничто в 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;
      }
   }
}

* Полностью непроверенный код,

10
ответ дан 2 December 2019 в 21:44
поделиться

Он срабатывает, если к нему применен источник привязки, если вы изменяете и данные, которые хранятся в поле сортировки, а затем изменяете положение записи, то событие срабатывает.

1
ответ дан 2 December 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: