Изменение свойств у объекта в ObservableCollection
Если добавить или удалить объект из ObservableCollection, то данная коллекция автоматически уведомляет об этом и изменения визуально отображаются. Но если взять в данной коллекции какой-либо объект и изменить у него какое-либо свойство, то визуально никаких изменений не происходит. Как это исправить?
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Нужно вызывать событие PropertyChanged, оповещать интерфейс об изменениях. Удобнее всего это можно сделать посредством реализации интерфейса INotifyPropertyChanged.
// Реализация INPC интерфейса
public class NotifyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public class MainViewModel : NotifyPropertyChanged
{
private ObservableCollection<MyItem> _items;
public ObservableCollection<MyItem> Items
{
get => _items;
set
{
_items = value;
OnPropertyChanged(); // оповещаем View, если коллекция изменилась на другую
}
}
public MainViewModel()
{
}
}
// Класс данных
public class MyItem : NotifyPropertyChanged
{
private int _myValue;
public string MyValue
{
get => _myValue;
set
{
_myValue = value;
OnPropertyChanged(); // оповещаем View, что изменилось свойство MyValue
}
}
}