1

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

3 回答 3

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");
            }
        }
    }
于 2013-07-17T13:25:28.203 回答
1

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

if (isModified & !Report)
{
   mReactantNumericUpDown.Value = mNumericUpDownValue;   
}
else
{
   mReactantGroup = (int)mReactantNumericUpDown.Value;
   ClearUserValues();
   UpdateControls();
}
于 2013-07-17T13:34:17.597 回答
0

我建议您在模型上实现IEditableObject以完成此行为。这真的很简单,恕我直言,这是做你想做的事情的正确方法。

于 2013-07-17T13:12:19.583 回答