在NumericUpDown中恢复值

时间:2013-07-17 12:36:50

标签: c# wpf event-handling numericupdown

我有一个NumericUpDown。当用户更改其值时,我会显示一个MessageBox进行确认。如果用户选择是,则表示一切正常。如果用户选择否,我想恢复原始值。

我遇到了两个问题:

Q1。如何获得原始价值 我将它存储在私有成员变量中,该变量在用户选择“是”时更新。但我想知道是否有更好的方法。

Q2。将值更改为原始值会再次触发我的事件处理程序 我已经设置了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;
    }
}

3 个答案:

答案 0 :(得分:2)

如果您绑定了您的价值,您可以直接阻止更改号码,直到用户确认。你会写这样的属性:

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

答案 1 :(得分:1)

我认为这种逻辑可以简化 (但我喜欢TrueEddie的回答 - 这对评论来说太过分了)

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

答案 2 :(得分:0)

我建议您在模型上实现IEditableObject以完成此行为。这真的很直接,恕我直言,正确的方式做你想要的。