I know that CoerceValueCallback
is used to correct a value and that ValidateValueCallback
will return true or false. But my question is why we need ValidatevalueCallback
? We can simply use CoerceValueCallback
to validate (using if condition) and correct the value. Can you give some practical example of when to use coercion vs. validation?
Here are the rules I follow for when to use coercion vs. validation.
Use CoerceValueCallback
If...
Use ValidateValueCallback
If...
So, it primarily depends on whether or not your property depends on other dependency properties or if you want others to be able to override your validation logic.
Since the ValidateValueCallback
is not part of the PropertyMetadata
, inheritors cannot modify the callback through the DependencyProperty.OverrideMetadata
function.
Also, since the ValidateValueCallback
does not provide your DependencyObject
as a parameter, you cannot perform advanced validation that depends on other dependency properties.
Example 1
Suppose you have Minimum
, Maximum
, & Value
properties. When any of these change, a CoerceValueCallback
shoud be used to ensure the other properties are consistent.
That is, Minmum
<= Value
<= Maximum
.
However, assuming these values are doubles, then there are some values that would never make sense, namely Double.NaN
, Double.PositiveInfinity
, and Double.NegativeInfinity
. Therefore, a ValidateValueCallback
should be used to verify that the double values are normal, numeric values.
In fact, this is exactly how RangeBase
works!
Example 2
Suppose you have a RegexTextBox
control which takes a string containing a regular expression (call it RegexString
). If a bad regular expression is provided, then what should be used instead? It might make sense to coerce it to be a null/empty value, rendering it useless; however, I suggest that this property be validated with a ValidateValueCallback
. This is because any error is now thrown at compile-time when designing via the WPF designer.
For this property, there shouldn't be a CoerceValueCallback
at all.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With