protected override void OnSourceChanged (object oldSource, object newSource)
{
base.OnSourceChanged (oldSource, newSource);
var old_do = oldSource as DependencyObject;
var new_do = newSource as DependencyObject;
if (dpChanged != null) {
Mono.NativeMethods.dependency_object_remove_property_change_handler (((DependencyObject) oldSource).native, DependencyProperty.Native, dpChanged);
dpChanged = null;
}
DependencyProperty = null;
PropertyInfo = null;
if (Source == null)
return;
var type = Source.GetType ();
if (TypeName != null)
type = Application.GetComponentTypeFromName (TypeName);
if (type == null)
return;
PropertyInfo = type.GetProperty (PropertyName);
DependencyProperty prop;
Types.Ensure (type);
if (DependencyProperty.TryLookup (Deployment.Current.Types.TypeToKind (type), PropertyName, out prop)) {
DependencyProperty = prop;
dpChanged = DPChanged;
Mono.NativeMethods.dependency_object_add_property_change_handler (new_do.native, DependencyProperty.Native, dpChanged, IntPtr.Zero);
}
}