Реализация INotifyPropertyChanged с ObservableCollection - PullRequest
0 голосов
/ 20 марта 2012

Я хочу получить данные из базы данных для отображения в ComboBox, а затем разрешить пользователям выбирать значения из этого ComboBox и добавлять их в ListBox (с помощью кнопок добавления / удаления).Смогу ли я обойтись без использования ObservableCollections для хранения значений базы данных для привязки к ComboBox, поскольку он реализует INotifyPropertyChangedCollectionChanged)?Извините, если это основной вопрос, я начал изучать WPF около месяца назад.

Я прочитал статью (очень хорошо сделано) Sacha Barber.

И я просмотрел страницу MSDN на ObservableCollection.

Каковы были бы преимущества / недостатки использования ObservableCollection против List (что, я знаю, делаетне реализовать INotifyPropertyChanged)?

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Что-то, что вы можете заметить.

Не путайте реализацию INotifyPropertyChanged в ObservableCollection с объектами, которые он содержит.

Если изменится одно из свойств одного из объектов в ObservableCollection, пользовательский интерфейс не отразит его, если этот объект также не реализует INotifyPropertyChanged.Не ожидайте, что ObservableCollection позаботится об этом за вас.

1 голос
/ 20 марта 2012

Если элементы в вашем поле со списком не изменяются (т.е. вы не добавляете / не удаляете / не обновляете элементы), тогда List, вероятно, будет в порядке для ваших нужд (ObservableCollection будет тоже), если вы уведомите вручнуючто ваше свойство List изменилось, когда вы на него воздействовали.

public List<X> MyList
{
    get
    {
        ...
    }

    set
    {
        if (... != value)
        {
            ... = value;
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("MyList"));
            }
        }
    }
}

....

this.MyList = new List<X> { new X(...), new X(...) };

Если вы планируете добавлять / удалять или обновлять элементы в комбинированном ящике (без создания нового объекта MyList, то есть с использованием this.MyList.Add(...))затем используйте ObservableCollection, который может уведомлять об обновлении коллекции (чтобы он мог обновлять привязки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...