2013-07-17 42 views
0

我有一個NumericUpDown。當用戶改變它的值時,我顯示一個MessageBox來確認。如果用戶選擇是,一切都很好。如果用戶選擇否,我想恢復原始值。在NumericUpDown中恢復值

我遇到了兩個問題:

Q1。如何獲得原始價值。
我將它存儲在私有成員變量中,當用戶選擇是時更新。但我想知道是否有更好的方法。 Q2302。將值更改爲原始值再次觸發我的事件處理程序。
我已經把一個if條件來處理。

這裏是我當前的代碼:

if (mNumericUpDownValue != mReactantNumericUpDown.Value) 
{ 
    bool change = !mIsModified; 
    if (mIsModified && ReportChangeWarning()) 
    { 
     change = true; 
    } 
    if (change) 
    { 
     mReactantGroup = (int)mReactantNumericUpDown.Value; 
     ClearUserValues(); 
     UpdateControls(); 
    } 
    else 
    { 
     mReactantNumericUpDown.Value = mNumericUpDownValue; 
    } 
} 
+0

你Q1是精細。在綁定您的控件時或者在用戶提交更改的值時存儲原始值。關於Q2,最簡單的可能是重置爲舊值時,首先註銷您的事件'ValueChanged'偵聽器,更改值,重新分配事件偵聽器。我不知道如果'NumericUpDown'有一個特殊的事件,只有當值由於用戶輸入而改變時纔會觸發。 –

+0

謝謝。我不知道我們可以註銷一個事件。在我來這裏之前,我正在使用Google搜索。 –

回答

0

我建議您實現您的模型IEditableObject來完成此行爲。這真的很直接,恕我直言,正確的方式做你想做的事情。

+0

我會盡力實現這一點,並會讓你們知道。我不知道那樣的東西存在。謝謝。 –

1

如果你對你的價值有約束力,你可以直接阻止改變數字,直到用戶確認。你會寫這樣的特性:

private int _testNumber; 

    public int TestNumber 
    { 
     get { return _testNumber; } 
     set 
     { 
      if (_testNumber != value) 
      { 
       MessageBoxResult result = MessageBox.Show("Change value?", "Change Value?", MessageBoxButton.YesNo); 

       if (result == MessageBoxResult.Yes) 
       { 
        _testNumber = value;       
       } 

       RaisePropertyChanged("TestNumber"); 
      } 
     } 
    } 
0

我覺得這個邏輯,可以簡化
(但我喜歡從TrueEddie了答案 - 這是太多評論)

if (isModified & !Report) 
{ 
    mReactantNumericUpDown.Value = mNumericUpDownValue; 
} 
else 
{ 
    mReactantGroup = (int)mReactantNumericUpDown.Value; 
    ClearUserValues(); 
    UpdateControls(); 
}