Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Не обновляется ListView

#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 ObservableCollection Items { 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.

Комментариев нет:

Отправить комментарий