通知派生 类 关于 属性 的变化
Notify derived classes about property changes
在我的应用程序中,我有一个定义 属性 的基 class。然后我创建了一些 classes A、B 和 C,它们继承自基础 class。
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();
}
}
在派生的 classes 中,我设置 属性 影响其他派生的 classes B 和 C 的基础属性 class 的值。我想要什么要做的是通知所有派生的 classes 一个 属性 已经改变。我该怎么做?
提前致谢。
编辑 根据sehe的评论。
好的,我什至找到了一个似乎有效的解决方案。我将基础 class 中的 Prop-属性 定义为静态 属性。在派生 classes 的构造函数中,我向基础 class 的 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 的基础 class。
在我的应用程序中,我有一个定义 属性 的基 class。然后我创建了一些 classes A、B 和 C,它们继承自基础 class。
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();
}
}
在派生的 classes 中,我设置 属性 影响其他派生的 classes B 和 C 的基础属性 class 的值。我想要什么要做的是通知所有派生的 classes 一个 属性 已经改变。我该怎么做?
提前致谢。
编辑 根据sehe的评论。
好的,我什至找到了一个似乎有效的解决方案。我将基础 class 中的 Prop-属性 定义为静态 属性。在派生 classes 的构造函数中,我向基础 class 的 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 的基础 class。