#123 – Coercing a Dependency Property
November 12, 2010 1 Comment
A class that implements a dependency property can optionally provide a coercion callback, which it specifies when registering the property. A coercion callback is called when a property is about to get a new value and gives the class a chance to coerce the property value to a different value.
You specify a validation callback when registering a dependency property, using the CoerceValueCallback delegate.
PropertyMetadata ageMetadata = new PropertyMetadata( 18, // Default value new PropertyChangedCallback(OnAgeChanged), new CoerceValueCallback(OnAgeCoerceValue)); // ** allow class to coerce value // Register the property AgeProperty = DependencyProperty.Register( "Age", // Property's name typeof(int), // Property's type typeof(Person), // Defining class' type ageMetadata, // Defines default value & changed/coercion callbacks (optional) new ValidateValueCallback(OnAgeValidateValue)); // validation (optional)
You might use coercion to enforce minimum and maximum values for a property.
private static object OnAgeCoerceValue (DependencyObject depObj, object baseValue) { int coercedValue = (int)baseValue; if ((int)baseValue > 120) coercedValue = 120; if ((int)baseValue < 1) coercedValue = 1; return coercedValue; }
Pingback: #133 – Where a Dependency Property Gets Its Value « 2,000 Things You Should Know About WPF