Подтвердить что ты не робот

Как я могу обнаружить изменения свойств элемента в BindingList <T>?

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

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

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

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

4b9b3361

Ответ 1

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 должен автоматически подключаться к вашему обработчику событий, и ваш графический интерфейс теперь должен обновляться, если вы установите класс, вызывающий обработчик события PropertyChanged.

[Edit to add:] Кроме того, класс BindingList показал два события, которые сообщают вам, когда коллекция была добавлена ​​или изменена:

public void DoSomething()
{
    BindingList<Foo> foos = getBindingList();
    foos.ListChanged += HandleFooChanged;
}

void HandleFooChanged(object sender, ListChangedEventArgs e)
{
    MessageBox.Show(e.ListChangedType.ToString());
}