我正在尝试在我的代码中执行“清除标记”。我在UI上连续显示数据,我希望用户能够在代码运行时使用“清除”按钮清除数据。我有第二个线程收集和更新UI线程上的数据。我试图在属性中使用一个标志,当它看到“清除标志”为真时,它将停留在预定值。当按下清除按钮时,我将“清除标志”设置为true并清除数据,但我的问题是知道何时完成,并在完成时将“清除标志”设置为假。
private bool _clear;
public bool Clear
{
get
{
return _clear;
}
set
{
_clear = value;
OnPropertyChanged("Clear");
if (value)
{
OnPropertyChanged(String.Empty);
}
}
}
private int _motorRPM;
public int MotorRPM
{
get
{
return _motorRPM;
}
set
{
_motorRPM = value;
OnPropertyChanged("MotorRPM");
}
}
private int _aveRPM;
public int AveRPM
{
get
{
return _aveRPM;
}
set
{
if (Clear)
{
_aveRPM = 0;
}
else
{
_aveRPM = (_aveRPM + value) / 2;
}
OnPropertyChanged("AveRPM");
}
}
private int _minRPM = Int32.MaxValue;
public int MinRPM
{
get
{
return _minRPM;
}
set
{
if (Clear)
{
_minRPM = Int32.MaxValue;
}
else
{
if (value < _minRPM)
{
_minRPM = value;
}
}
OnPropertyChanged("MinRPM");
}
}
private int _maxRPM;
public int MaxRPM
{
get
{
return _maxRPM;
}
set
{
if (Clear)
{
_maxRPM = 0;
}
else
{
if (value > _maxRPM)
{
_maxRPM = value;
}
}
OnPropertyChanged("MaxRPM");
}
}
正如您所看到的,我有一个“Clear”属性,当设置为true时,将使用OnPropertyChanged(String.Empty)调用更新所有属性,当“Clear”为true时,每个属性都保持已知值。
如何在完成所有PropertyChanged事件后将Clear设置为false?
答案 0 :(得分:0)
正如尼克拉斯所说,我会说:不要这样做! ViewModel中PropertyChanged的目的是更新UI。如果根据您的属性改变了某种逻辑,那么调试将是一场噩梦!
尽可能保持您的财产清洁。现在要更新一些依赖值,最好这样做:
private bool _clear;
public bool Clear
{
get
{
return _clear;
}
set
{
_clear = value;
OnPropertyChanged("Clear");
if (_clear)
ClearValues();
}
}
public void ClearValues()
{
AveRPM=0;
MinRPM=0;
MaxRPM=0;
...
Clear=False;
}
不完美,但对我来说似乎更具可读性和可维护性。
希望它有所帮助。