https://bugzilla.novell.com/show_bug.cgi?id=664832

https://bugzilla.novell.com/show_bug.cgi?id=664832#c0


           Summary: PropertyDescriptor.AddValueChanged not used for data
                    binding, asms.net does.
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.6.x
          Platform: x86
        OS/Version: Windows 7
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: Windows.Forms
        AssignedTo: [email protected]
        ReportedBy: [email protected]
         QAContact: [email protected]
          Found By: ---
           Blocker: ---


User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)
AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1036 Safari/532.5

EventDescriptor and not PropertyDescriptor.AddValueChanged when data binding,
as ms.net does.

This makes modifying the behaviour of hooking / unhooking events for properties
inconsistent between mono and ms.net.


Reproducible: Always

Steps to Reproduce:
1. Customize a PropertyDescriptor by implementing ICustomTypeDescriptor on the
data source, and returning a custom property in GetProperties.
2. Override AddValueChanged on your custom PropertyDescriptor.
3. Data bind to the custom property.

Actual Results:  
AddValueChanged is not called.
Custom value changed logic is not invoked.


Expected Results:  
AddValueChanged should be called.
Custom value changed should be invoked.


These changes fix the issue and causes the test above to pass.
Note that bug 651561 would also need to be fixed in order for these changes to
work correctly.

Code modified in Binding.GetPropertyChangedEvent to return PropertyDescriptor:
    PropertyDescriptor GetPropertyChangedEvent (object o, string property_name)
    {
        if (o == null || property_name == null || property_name.Length == 0)
            return null;

        PropertyDescriptor prop_changed_event = null;
        foreach (PropertyDescriptor event_desc in
TypeDescriptor.GetProperties(o))
        {
            if (event_desc.Name == property_name)
            {
                prop_changed_event = event_desc;
                break;
            }
        }
        return prop_changed_event;
    }

Line removed from PropertyManager:
    private EventDescriptor changed_event; // line removed

Code modified in PropertyManager.SetDataSource:
    internal void SetDataSource (object new_data_source)
    {
        if (prop_desc != null && data_source != null)                          
       // line added
            prop_desc.RemoveValueChanged(data_source,
property_value_changed_handler); // line added
        //if (changed_event != null)                                           
            // line removed
        //    changed_event.RemoveEventHandler (data_source,
property_value_changed_handler); // line removed

        data_source = new_data_source;

        if (property_name != null) {
            prop_desc = TypeDescriptor.GetProperties (data_source).Find
(property_name, true);
            if (prop_desc == null)
                return;

        if (prop_desc != null && data_source != null)                          
     // line added
        {                                                                      
     // line added
            property_value_changed_handler = new
EventHandler(PropertyValueChanged); // line added
            prop_desc.AddValueChanged(data_source,
property_value_changed_handler);  // line added
        }
        //changed_event = TypeDescriptor.GetEvents (data_source).Find
(property_name + "Changed", false);
        //if (changed_event != null) {
        //    property_value_changed_handler = new EventHandler
(PropertyValueChanged);
        //    changed_event.AddEventHandler (data_source,
property_value_changed_handler);
        //}
    }

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to