2013-04-29 63 views
0

我正在尝试在我的代码中执行“清除标记”。我的数据不断显示在用户界面上,我希望用户能够在代码运行时用“清除”按钮清除数据。我有第二个线程收集和更新UI线程上的数据。我试图在属性中使用一个标志,当它看到“清除标志”是真实的,以便达到预定值。当按下清除按钮时,我将“清除标志”设置为真,并清除数据,但是我的问题是知道何时完成,并在完成时将“清除标志”设置回false。在PropertyChanged事件完成后执行事件

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"); 
    } 
} 

正如你可以看到我有一个“清除”属性,当设置为true,将调用一个更新OnPropertyChanged(的String.Empty)的所有属性,每个属性休息为已知值时,“清除”是真的。

如何设置清除回假,当所有的PropertyChanged事件做了什么?

+0

咦?做'清除=假';就像我猜你做了'clear = true'来设置它...或者你的代码缺少一些重要的部分/信息? – Niclas 2013-04-29 21:09:47

+0

啊。对不起,误解了你:)对我来说,你有点滥用属性改变机制。为什么不使用单个命令并让它重置所有属性,并让每个属性都处理自己的PropertyChanged? – Niclas 2013-04-29 21:16:32

回答

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; 
} 

并不完美,但似乎更多的可读性和可维护性给我。

希望它有帮助。

+0

你知道你们是对的。由于我有一个按钮绑定命令调用一个函数,将Clear设置为true,我将摆脱Clear并将我的ClearValues()放在那里。谢谢。 – Bluto 2013-04-30 12:24:05

+0

这个作品谢谢你的帮助,但我做了一点点不同。而不是AveRPM = 0,我设置_aveRPM = 0,因为我有属性中的数学。除此之外,谢谢。只是忽略我之前提出的。它不会让我编辑它。 – Bluto 2013-04-30 12:31:20