我有一個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