private static void UnmanagedPropertyChangedCallback(IntPtr dependency_object, IntPtr dependency_property, IntPtr old_value, IntPtr new_value)
{
DependencyProperty property;
CustomDependencyProperty custom_property;
DependencyObject obj;
object old_obj, new_obj;
if (!properties.TryGetValue (dependency_property, out property)) {
Console.Error.WriteLine ("DependencyProperty.UnmanagedPropertyChangedCallback: Couldn't find the managed DependencyProperty corresponding with native {0}", dependency_property);
return;
}
custom_property = property as CustomDependencyProperty;
if (custom_property == null) {
Console.Error.WriteLine ("DependencyProperty.UnmanagedPropertyChangedCallback: Got the event for a builtin dependency property.");
return;
}
// Console.WriteLine ("UnmanagedPropertyChangedCallback {3} {2} {0} {1}", old_value, new_value, custom_property.name, custom_property.property_type.FullName);
if (custom_property.property_changed_callback == null)
return;
obj = NativeDependencyObjectHelper.Lookup (dependency_object) as DependencyObject;
if (obj == null)
return;
old_obj = Value.ToObject (property.property_type, old_value);
new_obj = Value.ToObject (property.property_type, new_value);
InvokeChangedCallback (obj, property, custom_property.property_changed_callback, old_obj, new_obj);
}