Silverlight 如何从静态属性访问PropertyChanged事件?
我有这样的静态属性:Silverlight 如何从静态属性访问PropertyChanged事件?,silverlight,Silverlight,我有这样的静态属性: public static int AverageDiarrheaB { get { return averageDiarrheaB; } set { averageDiarrheaB = value; OnPropertyChanged("AverageDiarrheaB"); } } public static event
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简单回答:
从public static int averagediab
和public static event property changedeventhandler property changed中删除“static”代码>
详细回答:
该键位于名称属性更改。。。它适用于对象的属性
只能合理地在附着到对象的属性(例如类属性)上设置属性更改事件。否则,“name”参数将毫无意义,因为没有具有该属性名称的对象
如果您只想在所有实例中共享一个设置,那么可以有一个由非静态setter和getter访问的静态字段
e、 g
如果您确实需要对整个对象进行静态访问,请搜索单例模式,并以这种方式访问对象的单个实例
但忽略所有这些,这将起作用(经过测试):
。。。如果将其替换为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));
}
}
使用staticPropertyChanged
事件的结果是您将没有对象引用。尝试一下,看看它是否“足够”满足您的需要
鉴于您的代码中对PropertyChanged
事件的严重误用,我建议使用新的事件名称:)简单回答:
从public static int averagediab
和public static event property changedeventhandler property changed中删除“static”代码>
详细回答:
该键位于名称属性更改。。。它适用于对象的属性
只能合理地在附着到对象的属性(例如类属性)上设置属性更改事件。否则,“name”参数将毫无意义,因为没有具有该属性名称的对象
如果您只想在所有实例中共享一个设置,那么可以有一个由非静态setter和getter访问的静态字段
e、 g
如果您确实需要对整个对象进行静态访问,请搜索单例模式,并以这种方式访问对象的单个实例
但忽略所有这些,这将起作用(经过测试):
。。。如果将其替换为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));
}
}
使用staticPropertyChanged
事件的结果是您将没有对象引用。尝试一下,看看它是否“足够”满足您的需要
鉴于您的代码中对属性更改事件的严重误用,我建议您改用新的事件名称:)“仍然不工作”并不能真正说明建议3种不同选项时的问题所在。请发布完整的代码,以便我们发现问题。:)我无法从publicstatic int averagedRecreab中删除“static”,因为在所有页面中,我都以classname.averagedRecreab的身份访问此属性。我用Null代替了“这个”。但不起作用“仍然不起作用”并不能真正说明当提出3种不同的选择时问题所在。请发布完整的代码,以便我们发现问题。:)我无法从publicstatic int averagedRecreab中删除“static”,因为在所有页面中,我都以classname.averagedRecreab的身份访问此属性。我用Null代替了“这个”。但是不工作+1只是为了在代码中使用属性(
),我已经为您的当前情况更新了一个修复程序,这样您就不需要更改静态属性的所有其他用途。请注意,我并不容忍您从任何地方访问静态属性的方法,并强烈建议您找到一种更好的模式。+1仅用于在代码中使用或:)我已更新了一个修复程序,仅用于您当前的情况,因此您无需更改静态属性的所有其他用途。请注意,我并不是在纵容您从任何地方访问静态属性的方法,而是强烈建议您找到更好的模式。