/// <summary> /// Remove an existing observer for this dependency property. <b>This call is needed to avoid memory leaks!</b> /// </summary> /// <param name="dp"></param> /// <param name="depObj">Dependency Object that observe this property</param> /// <param name="callback">Callback method is called in case of property value change</param> /// <returns>TRUE if success</returns> public static bool RemoveValueChanged(this DependencyProperty dp, DependencyObject depObj, EventHandler callback) { var dependencyPropertyDescriptor = DependencyPropertyDescriptor.FromProperty(dp, depObj.GetType()); dependencyPropertyDescriptor.RemoveValueChanged(depObj, callback); DependencyPropertyUtils.RaiseRemovePropertyObserver(dp, depObj); return(true); }
/// <summary> /// Add an observer for this dependency property. <b>Please remove callback with <see cref="RemoveValueChanged"/> to avoid memory leaks!</b> /// </summary> /// <param name="dp"></param> /// <param name="depObj">Dependency Object that observe this property</param> /// <param name="callback">Callback method is called in case of property value change</param> /// <param name="runImmediately">TRUE to run immediately (with this method call), otherwise FALSE. Default is TRUE</param> /// <returns>TRUE if success</returns> public static void AddValueChanged(this DependencyProperty dp, DependencyObject depObj, EventHandler callback, bool runImmediately = true) { var dependencyPropertyDescriptor = DependencyPropertyDescriptor.FromProperty(dp, depObj.GetType()); dependencyPropertyDescriptor.AddValueChanged(depObj, callback); DependencyPropertyUtils.RaiseAddPropertyObserver(dp, depObj); if (runImmediately) { callback(dp, new EventArgs()); } }