* XplatUIX11.cs: Removed unused hwnd var in SetBorderStyle.
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / Binding.cs
index b6c2e5fe189fefb7d75831fc8d39e3bbac0cfe02..7fe7b29b1e89c9b9f6f71ebda8ceb1939cce8e15 100644 (file)
@@ -43,10 +43,6 @@ namespace System.Windows.Forms {
                private PropertyDescriptor control_property;
                private PropertyDescriptor is_null_desc;
 
-               private EventDescriptor changed_event;
-               private EventHandler property_value_changed_handler;
-               private object event_current; // The manager.Current as far as the changed_event knows
-
                private object data;
                private Type data_type;
 
@@ -135,7 +131,6 @@ namespace System.Windows.Forms {
                        control.Validating += new CancelEventHandler (ControlValidatingHandler);
 
                        this.control = control;
-                       control.DataBindings.Add (this);
                }
 
                internal void Check (BindingContext binding_context)
@@ -165,7 +160,7 @@ namespace System.Windows.Forms {
 
                internal void PushData ()
                {
-                       if (IsBinding == false || manager.Current == null)
+                       if (manager == null || manager.IsSuspended || manager.Current == null)
                                return;
 
                        if (is_null_desc != null) {
@@ -179,8 +174,7 @@ namespace System.Windows.Forms {
                        PropertyDescriptor pd = TypeDescriptor.GetProperties (manager.Current).Find (binding_member_info.BindingField, true);
                        if (pd == null) {
                                data = ParseData (manager.Current, manager.Current.GetType ());
-                       }
-                       else {
+                       } else {
                                data = ParseData (pd.GetValue (manager.Current), pd.PropertyType);
                        }
 
@@ -214,7 +208,16 @@ namespace System.Windows.Forms {
 
                private void ControlValidatingHandler (object sender, CancelEventArgs e)
                {
-                       PullData ();
+                       object old_data = data;
+
+                       // If the data doesn't seem to be valid (it can't be converted,
+                       // is the wrong type, etc, we reset to the old data value.
+                       try {
+                               PullData ();
+                       } catch {
+                               data = old_data;
+                               SetControlValue (data);
+                       }
                }
 
                private void PositionChangedHandler (object sender, EventArgs e)