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));
    }
}
使用static
PropertyChanged
事件的结果是您将没有对象引用。尝试一下,看看它是否“足够”满足您的需要

鉴于您的代码中对
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));
    }
}
使用static
PropertyChanged
事件的结果是您将没有对象引用。尝试一下,看看它是否“足够”满足您的需要


鉴于您的代码中对
属性更改
事件的严重误用,我建议您改用新的事件名称:)

“仍然不工作”并不能真正说明建议3种不同选项时的问题所在。请发布完整的代码,以便我们发现问题。:)我无法从publicstatic int averagedRecreab中删除“static”,因为在所有页面中,我都以classname.averagedRecreab的身份访问此属性。我用Null代替了“这个”。但不起作用“仍然不起作用”并不能真正说明当提出3种不同的选择时问题所在。请发布完整的代码,以便我们发现问题。:)我无法从publicstatic int averagedRecreab中删除“static”,因为在所有页面中,我都以classname.averagedRecreab的身份访问此属性。我用Null代替了“这个”。但是不工作+1只是为了在代码中使用
属性(
),我已经为您的当前情况更新了一个修复程序,这样您就不需要更改静态属性的所有其他用途。请注意,我并不容忍您从任何地方访问静态属性的方法,并强烈建议您找到一种更好的模式。+1仅用于在代码中使用
:)我已更新了一个修复程序,仅用于您当前的情况,因此您无需更改静态属性的所有其他用途。请注意,我并不是在纵容您从任何地方访问静态属性的方法,而是强烈建议您找到更好的模式。