C# свойство Setter не работает для моего компонента

Я разрабатываю компонент для себя. Одно из свойств компонента - «Статус», имеющее тип «StatusClass».

MyCode:

private StatusClass _mStatus=new StatusClass();
public StatusClass Status
{
    get { return this._mStatus; }
    set
    {
        this._mStatus = value;
        this.Refresh();
    }
}

проблема в том, что метод установки / "Refresh" не вызывается при изменении одного свойства StatusClass. Например:

myComponent.Status.proprety1 = 3;  // the "Refresh method not call

но:

myComponent.Status = new StatusClass(); // the "Refresh method called

как я могу правильно определить свойство Status, чтобы при изменении его значения вызывалась функция установки.

Спасибо,

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
908
1

Ответы 1

Метод обновления вызывается, когда экземпляр Status обновляется до нового объекта, как вы определили его в установщике this.Refresh();.

myComponent.Status = new StatusClass(); // the "Refresh method called

И он не будет вызываться этой строкой

myComponent.Status.proprety1 = 3;  // the "Refresh method not call

поскольку здесь вы обновление собственностиStatus вместо самого объекта.

Чтобы достичь этого, даже при изменении свойств класса Status уведомление должно быть получено в классе invoker, затем вы реализуете интерфейс INotifyPropertyChanged, который помогает уведомить клиентов об изменении значения свойства. Вы можете прочитать об этом здесь.

public class StatusClass  : INotifyPropertyChanged
    {

        public event PropertyChangedEventHandler PropertyChanged;

        // This method is called by the Set accessor of each property.
        // The CallerMemberName attribute that is applied to the optional propertyName
        // parameter causes the property name of the caller to be substituted as an argument.
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

    private int proprety1 
    public int Proprety1 
    {
        get
        {
            return this.proprety1;
        }

        set
        {
            if (value != this.proprety1)
            {
                this.proprety1 = value;
                NotifyPropertyChanged();
            }
        }
    }
}

Теперь в классе invoker вы можете определить объект как

public class DemoClass
{
     private StatusClass _mStatus = new StatusClass();

     public DemoClass()
     {
          _mStatus.PropertyChanged = (sender, args) => { this.Refresh(); }
     }
}

Поэтому, когда теперь вызывается myComponent.Status.Proprety1 = 3;, будет вызываться Refresh, поскольку он подписался на изменение свойства StatusClass.

Другие вопросы по теме