Как я могу обнаружить изменения в свойствах элемента в BindingList <T>? - PullRequest
14 голосов
/ 17 марта 2009

У меня есть собственный класс Foo со свойствами A и B. Я хочу отобразить его в элементе управления привязкой данных.

Я создал класс Foos : BindingList<Foo>.

Чтобы обновить некоторые внутренние свойства класса Foos, я должен быть уведомлен об изменениях свойств (я могу обрабатывать вставки, удаления и т. Д.) Для элементов в списке. Как бы вы реализовали эту функциональность?

Должен ли я наследовать Foo от некоторого объекта в платформе, которая поддерживает это? Я думаю, что я мог бы создать события, которые уведомят меня, если изменения, но так ли это должно быть сделано? Или в фреймворке есть какой-то шаблон, который бы мне помог?

1 Ответ

22 голосов
/ 17 марта 2009

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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...