我有一个UserControl
和一个int DependencyProperty
称为价值。这被绑定到UserControl
上的文本输入。如何处理DependencyProperty溢出情况?
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(QuantityUpDown), new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnValueChanged, CoerceValue));
public int Value
{
get { return (int) GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
private static object CoerceValue(DependencyObject d, object basevalue)
{
//Verifies value is not outside Minimum or Maximum
QuantityUpDown upDown = d as QuantityUpDown;
if (upDown == null)
return basevalue;
if ((int)basevalue <= 0 && upDown.Instrument != null)
return upDown.Minimum;
//Stocks and ForEx can have values smaller than their lotsize (which is assigned to Minimum)
if (upDown.Instrument != null &&
upDown.Instrument.MasterInstrument.InstrumentType != Cbi.InstrumentType.Stock &&
upDown.Instrument.MasterInstrument.InstrumentType != Cbi.InstrumentType.Forex)
return Math.Max(Math.Min(upDown.Maximum, (int)basevalue), upDown.Minimum);
if (upDown.Instrument == null)
return Math.Max(Math.Min(upDown.Maximum, (int)basevalue), upDown.Minimum);
if (upDown.Instrument.MasterInstrument.InstrumentType == Cbi.InstrumentType.Stock ||
upDown.Instrument.MasterInstrument.InstrumentType == Cbi.InstrumentType.Forex)
return Math.Min(upDown.Maximum, (int)basevalue);
return basevalue;
}
如果用户输入大于int.MaxValue
在文本框中的值,当该值进入CoerceValue
,所述baseValue
参数是1,如果我提供关于DependencyProperty
验证值回调同样发生。
我想自己处理这种情况,例如将传入值设置为int.MaxValue
。有没有办法做到这一点?
如果您需要在绑定将值传递给源属性(即target == TextBox.Text,source == QuantityUpDown.Value)之前进行验证, ,你可以用[Binding.ValidationRules](h TTPS://msdn.microsoft.com/en-us/library/ms753962(V = vs.110)的.aspx)。 –
属性的类型是'int'。因此传入Coerce方法的值不能大于“int.MaxValue”。 – Clemens
@Clemens,显然。然而用户可以输入一个大于int.MaxValue的值。我该如何处理这种情况? – WasGoodDone