Wednesday, March 10, 2010

Registering for Dependency Property Changed Events

WPF dependency properties have built-in support for change notification. However, it was not until last week that I realized that I had never registered for a change on a dependency property (at least not one that lacks an explicitly-defined event.) I have made use of the feature many times while data binding. But I had never had to register my own handler for a dependency property changed event.

The registration mechanism is non-intuitive. So I defined the following extension methods:

public static void AddDependencyPropertyChangedEventHandler(this DependencyObject obj, DependencyProperty dp, EventHandler handler)
{
    var dpd = DependencyPropertyDescriptor.FromProperty(dp, obj.GetType());
    dpd.AddValueChanged(obj, handler);
}
 
public static void RemoveDependencyPropertyChangedEventHandler(this DependencyProperty obj, DependencyProperty dp, EventHandler handler)
{
    var dpd = DependencyPropertyDescriptor.FromProperty(dp, obj.GetType());
    dpd.RemoveValueChanged(obj, handler);
}