2013-04-29 34 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