2009-03-17 1 views
12

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

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

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

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

ответ

19

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

[Редактировать добавить:] Кроме того, класс BindingList exposted two events который уведомляет вас, когда коллекция была добавлена ​​или изменения:

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

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

тестирование ... Я думаю, что это то, что я ищу. –

+0

Какое событие в классе Foos будет улавливать обработчики PropertyChanged? Помните, что мне нужно работать в классе Foos (в основном, перерабатывая некоторые внутренние словари). –

+0

Допустим, ваш класс Foo был реализован так же, как показано выше. Когда любой класс устанавливает свойство Foo.SomeValue, экземпляр Foo вызывает обработчик события PropertyChanged. Вы можете (если хотите) подключить этот обработчик событий непосредственно к экземпляру Foo или через BindingList.ListChanged. – Juliet

Смежные вопросы