Я работаю над BindingList, и я хочу изменить его поведение по умолчанию, так что обновление DataGridView, к которому оно привязано, выполняется, когда я вручную поднимаю событие. В моем случае я обновляю BindingList с данными в цикле foreach каждые 1 секунду, и после того, как все содержимое обновлено, я хочу обновить DataGridView. Что мне делать?Изменение поведения по умолчанию для BindingList
1
A
ответ
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
Вы можете:
- использовать BindingSource, чтобы обернуть BindingList
- в DataGridView связываются с BindingSource
- набор BindingSource.RaiseListChangedEvents = ложь, поэтому ListChanged события не воскресает (сетка данные не слушают изменение)
- список обновлений
- сброса RaiseListChangedEvents и вызвать BindingSource.ResetBindings(false) сигнализировать весь связанный компонент для обновления данных
обычно вы также можете использовать BindingSource.SuspendBinding для предотвращения изменений и ResumeBinding возобновить, но не работает с DataGridView, только с простым управлением, как TextBox (см remarks on msdn)
Переопределение 'BindingList .SupportsChangeNotificationCor' отступит от литиево st, но 'ResetBinding()' не работает. –
user1816806
извините, да, я только что создал тестовый проект, и похоже, вам нужно установить 'RaiseListChangedEvents = true' перед вызовом' ResetBindings'. Редактирование моего ответа. –