通知有关属性更改的派生类

时间:2015-07-01 08:39:04

标签: c# inheritance derived-class

在我的应用程序中,我有一个定义属性的基类。然后我创建了一些继承自基类的类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的基类属性的属性值。我想要做的是通知所有派生类属性已更改。我怎么能这样做?

提前致谢。

编辑根据sehe的评论。

1 个答案:

答案 0 :(得分:2)

好的,我甚至找到了似乎有效的解决方案。我将基类中的Prop-property定义为静态属性。在派生类的构造函数中,我向基类的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的基类派生。