Foo должен реализовать интерфейсы INotifyPropertyChanged
и INotifyPropertyChanging
.
public void Foo : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
private int _someValue;
public int SomeValue
{
get { return _someValue; }
set { _someValue = value; NotifyPropertyChanged("SomeValue"); }
}
}
BindingList
должен автоматически подключаться к вашему обработчику событий, и теперь ваш GUI должен обновляться всякий раз, когда вы устанавливаете класс, вызывает обработчик событий PropertyChanged
.
[Изменить, чтобы добавить:] Кроме того, класс BindingList
предоставляет два события , которые уведомляют вас о добавлении или изменении коллекции:
public void DoSomething()
{
BindingList<Foo> foos = getBindingList();
foos.ListChanged += HandleFooChanged;
}
void HandleFooChanged(object sender, ListChangedEventArgs e)
{
MessageBox.Show(e.ListChangedType.ToString());
}