我有这样的静态属性:
public static int AverageDiarrheaB
{
get { return averageDiarrheaB; }
set
{
averageDiarrheaB = value;
OnPropertyChanged("AverageDiarrheaB");
}
}
public static event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
运行时我收到此错误:非静态字段,方法或属性'CareMapGlobals.OnPropertyChanged(string)'需要对象引用。
如何纠正这个......请帮助
由于
和Sandeep
答案 0 :(得分:0)
从public static int AverageDiarrheaB
和public static event PropertyChangedEventHandler PropertyChanged;
密钥名称为PropertyChanged
...它适用于对象的属性。
您只能在附加到对象的属性(例如类属性)上明智地拥有属性更改事件。否则,“name”参数将毫无意义,因为没有具有该属性名称的对象。
如果您只想在所有实例之间共享一个设置,则可以使用非静态setter和getter访问的静态字段。
e.g。
private static int averageDiarrheaB
public int AverageDiarrheaB
{
get { return averageDiarrheaB; }
set
{
averageDiarrheaB = value;
OnPropertyChanged("AverageDiarrheaB");
}
}
如果您确实需要静态访问整个对象,请搜索单例模式,并以相应的方式访问对象的单个实例。
...如果您将此替换为null,并且显示其他更改以使OnPropertyChanged
变为静态,则您的代码将“正常工作”:
private static int averageDiarrheaB;
public static int AverageDiarrheaB
{
get { return averageDiarrheaB; }
set
{
averageDiarrheaB = value;
OnPropertyChanged("AverageDiarrheaB");
}
}
public static event PropertyChangedEventHandler PropertyChanged;
public static void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(null, new PropertyChangedEventArgs(name));
}
}
使用静态PropertyChanged
事件的后果是您没有对象引用。试一试,看看它是否足够“满足”。
鉴于您的代码中PropertyChanged
事件被极度滥用,我建议您使用新的事件名称:)