Изменение свойств у объекта в 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
        }
    }
}
→ Ссылка