2014-09-10 3 views
1

Я работаю над BindingList, и я хочу изменить его поведение по умолчанию, так что обновление DataGridView, к которому оно привязано, выполняется, когда я вручную поднимаю событие. В моем случае я обновляю BindingList с данными в цикле foreach каждые 1 секунду, и после того, как все содержимое обновлено, я хочу обновить DataGridView. Что мне делать?Изменение поведения по умолчанию для BindingList

ответ

1

Глядя на документацию MSDN, это выглядит, как вы можете извлечь из BindingList<T> и переопределить BindingList<T>.SupportsChangeNotificationCore отключить список уведомлений об изменениях:

public class MyBindingList<T> : BindingList<T> 
{ 
    protected override bool SupportsChangeNotificationCore 
    { 
     get { return false; } 
    } 
} 

, а затем вы должны быть в состоянии назвать ResetBindings(), когда вам необходимо обновить ваш DataGridView.

Однако, если по «обновлению BindingList», вы просто означать добавление/удаление элементов, то вы можете установить BindingList<T>.RaiseListChangedEvents ложь, чтобы отключить список изменился уведомлений:

var bindingList = new BindingList<string>(); 
bindingList.RaiseListChangedEvents = false; // turn off notifications 
bindingList.Add("foo"); // no notifications raised 
... 
bindingList.RaiseListChangedEvents = true; // turn on notifications 
bindingList.ResetBindings(); // raise notifications 
+0

Переопределение 'BindingList .SupportsChangeNotificationCor' отступит от литиево st, но 'ResetBinding()' не работает. – user1816806

+0

извините, да, я только что создал тестовый проект, и похоже, вам нужно установить 'RaiseListChangedEvents = true' перед вызовом' ResetBindings'. Редактирование моего ответа. –

0

Вы можете:

  1. использовать BindingSource, чтобы обернуть BindingList
  2. в DataGridView связываются с BindingSource
  3. набор BindingSource.RaiseListChangedEvents = ложь, поэтому ListChanged события не воскресает (сетка данные не слушают изменение)
  4. список обновлений
  5. сброса RaiseListChangedEvents и вызвать BindingSource.ResetBindings(false) сигнализировать весь связанный компонент для обновления данных

обычно вы также можете использовать BindingSource.SuspendBinding для предотвращения изменений и ResumeBinding возобновить, но не работает с DataGridView, только с простым управлением, как TextBox (см remarks on msdn)