ObservableCollection объектов, содержащих списки - PullRequest
2 голосов
/ 21 июня 2011

Я использую ObservableCollection для привязки данных в качестве ItemsSource для DataGrid.Коллекция содержит объекты сложного типа.Одним из свойств этого типа является список строк.

На данный момент я вижу, что при обновлении этого свойства списка из кода ничего не меняется в пользовательском интерфейсе (первичная привязка работает нормально).Итак, мой вопрос: это ожидаемое поведение?Может быть, я не должен использовать List как часть типа, но также использовать ObservableCollection?

Обновление

Режим установлен на OneWay.

Ответы [ 4 ]

2 голосов
/ 21 июня 2011

Используйте коллекцию вместо List, которая реализует интерфейс INotifyCollectionChanged (как ObservableCollection ).Затем изменения в коллекции будут перенесены в пользовательский интерфейс.

0 голосов
/ 21 июня 2011

Да, это ожидаемое поведение. Наблюдаемая коллекция только уведомляет об изменениях своего собственного содержимого, то есть добавляет, удаляет, переупорядочивает.

То, на что вы смотрите, - это изменение элемента в наблюдаемой коллекции - если вы хотите увидеть свои изменения в классе, который вы вставили, ваш элемент должен реализовать INotifyPropertyChanged.

Так что в настоящее время: если ваше свойство списка в вашем сложном объекте изменится, вы его не увидите, однако, если вы также измените его, чтобы оно стало наблюдаемой коллекцией, вы можете увидеть изменения этой коллекции в элементе управления подэлементами, например в выпадающем списке, - но если вы изменяете объект коллекции на другой - поэтому, если вы не реализуете INotifyPropertyChanged, вы должны установить свойство collectionproperty до применения привязки.

0 голосов
/ 21 июня 2011
0 голосов
/ 21 июня 2011

Когда вы обновляете свой список, вы должны вызывать INotifyPropertyChange, чтобы другой мудрый пользовательский интерфейс не получал обновления результата списка.

INotifyPropertyChange указывает на то, что здесь произошли некоторые изменения в источнике элементов, поэтому обновите его.

...