Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# InotifyProperty已更改为Singleton类_C#_Wpf - Fatal编程技术网

C# InotifyProperty已更改为Singleton类

C# InotifyProperty已更改为Singleton类,c#,wpf,C#,Wpf,我试图在singelton类中实现INotifyPropertyChanged 这是我的密码: 公共类plc:INotifyPropertyChanged { 我删除了无法访问的错误代码,当然NotifyPropertyChange不起作用这是因为您在返回后调用了OnPropertyChanged(); 应在设置值后调用,即: public string plcIp { get { return _plcIp; } set {

我试图在singelton类中实现INotifyPropertyChanged

这是我的密码:

公共类plc:INotifyPropertyChanged {


我删除了无法访问的错误代码,当然NotifyPropertyChange不起作用

这是因为您在
返回后调用了
OnPropertyChanged();

应在设置值后调用,即:

public string plcIp
{
    get
    {
        return _plcIp;
    }
    set
    {
        if (value != _plcIp)
        {
            _plcIp = value;
            OnPropertyChanged();
        }
    }
}

在引发事件之前,还应该检查setter中的值是否确实在更改。

这是因为在
返回后调用了
OnPropertyChanged();

应在设置值后调用,即:

public string plcIp
{
    get
    {
        return _plcIp;
    }
    set
    {
        if (value != _plcIp)
        {
            _plcIp = value;
            OnPropertyChanged();
        }
    }
}

在引发事件之前,还应检查setter中的值是否正在实际更改。

这包含错误:

public string plcIp
    {
        get
        {
            return _plcIp;
            OnPropertyChanged(); //This row..
        }
        set { _plcIp = value; }    
    }
在Set方法中,您希望在UI中进行更新,而不是在获得值时进行更新。 大概是这样的:

public string plcIp
{
    get { return _plcIp; }
    set { _plcIp = value; OnPropertyChanged(); }    
}

这包含以下错误:

public string plcIp
    {
        get
        {
            return _plcIp;
            OnPropertyChanged(); //This row..
        }
        set { _plcIp = value; }    
    }
在Set方法中,您希望在UI中进行更新,而不是在获得值时进行更新。 大概是这样的:

public string plcIp
{
    get { return _plcIp; }
    set { _plcIp = value; OnPropertyChanged(); }    
}

您的代码中有几个问题:

  • 若您正在实现单例,那个么类的构造函数应该是私有的
  • 使用字段而不是私有属性
  • 属性不应该是静态的(您使用的是单例)
  • 在引发OnPropertyChanged事件之前,验证属性值是否确实已更改
  • 在返回属性值之前引发事件
  • 使用PascalNames作为类名和属性名
  • 从setter而不是getter引发事件
代码:


您的代码中有几个问题:

  • 若您正在实现单例,那个么类的构造函数应该是私有的
  • 使用字段而不是私有属性
  • 属性不应该是静态的(您使用的是单例)
  • 在引发OnPropertyChanged事件之前,验证属性值是否确实已更改
  • 在返回属性值之前引发事件
  • 使用PascalNames作为类名和属性名
  • 从setter而不是getter引发事件
代码:


此外,为了防止竞争条件,您的PropertyChanged函数应该是
var-handler=PropertyChanged;如果(handler!=null){handler,这….
另外为了防止竞争条件,您的PropertyChanged函数应该是
var-handler=PropertyChanged;如果(handler!=null){handler,这….