Как правильно использовать INotifyPropertyChanged для извещения «родителя» о изменение свойства экземпляра?

Проблема такая: необходимо изменять значения в коллекции при изменении хотя бы одного из полей в объекте. Если ближе к самой идеи кода, то при изменении длины одного из участков трубы, нужно пересчитать другие.

Архитектура в коде такая: родительский абстрактный класс public abstract class AbstractTube от которого наследуется класс public class TubingStage : AbstractTube и создается лист из труб
public class CollectionTubingStage : ObservableCollection<TubingStage>, INotifyPropertyChanged
    {     
        
    }

Есть обработчик события и само событие в классе TubingStage:
public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }


И код свойства в том же классе
public override double Lenght
        {
            get
            { return TLenght; }
            set
            { 
            TLenght = value;
            NeedAutoAlign = true;
            NotifyPropertyChanged("Lenght of stage has been changed!");
            }
        }


Как мне правильно воспользоваться INotifyPropertyChanged для этого? Не понятно как из экземпляра коллекции получить доступ к самой коллекции, для ее модификации.
  • Вопрос задан
  • 3957 просмотров
Решения вопроса 2
@serber
1. Класс ObservableCollection уже реализует интерфейс INotifyPropertyChanged.
2. Вы не правильно вызываете метод NotifyPropertyChanged. В качестве параметра должно передаваться имя свойства, которое было изменено. Т.е. должно быть так
NotifyPropertyChanged("Lenght");
3. Правильнее писать Length, а не Lenght
Ответ написан
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
К предыдущему ответу я бы еще добавил что в зависимости от задачи можно элементы наследовать от INotifyPropertyChanged. Что бы при изменении элементы коллекции шло уведомление в UI.
И да, вариант описанный вами не единственный, но вполне имеющий право на жизнь в проекте. Изучайте эту тему дальше.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы