#c_sharp #wpf
Есть ObservableCollection, и есть ListView, который бандит элементы из этой самой коллекции. Дальше, есть метод, в котором происходит следующая штука: Resistances = new ObservableCollection (newList); где Resistances - это объект ObservableCollection , связанный с ListView. Так вот проблема: ListView не хочет обновляться после этого, хотя, вроди-как, произошла замена коллекции и ListView должен был бы перерисоваться. P.S. Вот так, например, работает. ListView корректно обновляется: Resistances.Clear(); foreach (Quantity q in newList) { Resistances.Add(q); } Так почему же не работает первый вариант - при замене всего списка? Разве не происходит событие CollectionChanged?
Ответы
Ответ 1
Вероятно, ваше свойство Resistances не бросает событие PropertyChanged. Для того, чтобы обновление данных сработало нужно, чтобы ваше свойство выглядело примерно так: public ObservableCollectionItems { get { return _items; } set { if (_items != value) { _items = value; OnPropertyChanged("Items"); } } } private ObservableCollection _items; XAML: UPDATE Да, вы верно поняли. У Вас получается примерно следующее: Вы создаете свойство-коллекцю и привязываете его к ListView Вы создаете новую коллекцию и присваиваете ее свойству, однако привязка не обновляется, т.к. формально ваше свойство не изменилось (не было брошено PropertyChanged). Я предпочитаю использовать ленивую инициализацию коллекций без setter'ов (возможно, вам такой подход будет интересен): public ObservableCollection Items { get { return _items ?? (_items = new ObservableCollection ()); } } private ObservableCollection _items; А потом очищать и заполнять ее данными. Ответ 2
ListView не знает о том, что коллекция заменена. Нужно вызвать OnPropertyChanged('Resistances') или другой способ дернуть событие PropertyChanged.
Комментариев нет:
Отправить комментарий