恢复NumericUpDown中的值

本文关键字:NumericUpDown 恢复 | 更新日期: 2023-09-27 18:23:40

我有一个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;
    }
}

恢复NumericUpDown中的值

如果绑定到您的值,您可以简单地阻止更改数字,直到用户确认。你可以这样写属性:

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

我认为这个逻辑可以简化
(但我喜欢TrueEddie的回答——这太多了,无法发表评论)

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

我建议您在模型上实现IEditableObject来实现这种行为。这真的很直接,IMHO是做你想做的事情的正确方式。