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