如何从静态属性访问PropertyChanged事件?

时间:2011-09-26 12:48:07

标签: silverlight

我有这样的静态属性:

    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

1 个答案:

答案 0 :(得分:0)

简单回答:

public static int AverageDiarrheaBpublic 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事件被极度滥用,我建议您使用新的事件名称:)