我有一个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;
}
}
如果绑定到您的值,您可以简单地阻止更改数字,直到用户确认。你可以这样写属性:
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是做你想做的事情的正确方式。