【问题标题】:Notify derived classes about property changes通知派生类有关属性更改
【发布时间】:2015-09-18 07:45:13
【问题描述】:

在我的应用程序中,我有一个定义属性的基类。然后我创建了一些从基类继承的类 A、B 和 C。

public class BaseClass {
    private static _prop;

    public PropType Prop {
        get { return _prop; }
        set {
            _prop = value;
            NotifyPropertyChanged("Prop");
        }
    }

    public BaseClass() {}
}

public class A : BaseClass {
    public A() {}

    private void someMethod() {
        Prop = new PropType();
    }
}

在派生类中,我设置了影响其他派生类 B 和 C 的基类属性的属性值。我想要做的是通知所有派生类属性已更改。我该怎么做?

提前致谢。

EDIT根据sehe的评论。

【问题讨论】:

  • “影响其他派生类” - 您是指该派生类的其他实例吗?
  • 不,我的意思是类 B 和 C 也派生自 BaseClass。
  • 这是单例模式或只是静态属性/字段的经典示例

标签: c# inheritance derived-class


【解决方案1】:

好的,我什至找到了一个似乎可行的解决方案。我将基类中的 Prop 属性定义为静态属性。在派生类的构造函数中,我向基类的 PropertyChanged 事件注册了一个静态事件处理程序。代码现在看起来像这样:

public abstract class BaseClass {
    private static _prop;
    static event PropertyChangedEventHandler PropertyChanged;

    private static void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(null, new PropertyChangedEventArgs(propertyName));
        }
    }

    public static PropType Prop {
        get { return _prop; }
        set {
            _prop = value;
            NotifyPropertyChanged("Prop");
        }
    }

    public BaseClass() {}

    protected abstract void BaseVM_PropertyChanged(object sender, PropertyChangedEventArgs e);
}

public class A : BaseClass {
    public A() {
        base.PropertyChanged += BaseVM_PropertyChanged;
    }

    protected override void BaseVM_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        // react on property changes here
    }
    private void someMethod() {
        Prop = new PropType();
    }
}

请注意,您必须在 BaseClass 中实现静态 PropertyChanged 事件和相应的静态 NotifyPropertyChanged 方法,无论 BaseClass 是否派生自另一个已经实现 INotifyPropertyChanged 的​​基类。

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多