using System.ComponentModel;
using System.Collections;
-namespace System.Windows.Forms {
- public abstract class BindingManagerBase {
+namespace System.Windows.Forms
+{
+ public abstract class BindingManagerBase
+ {
private BindingsCollection bindings;
- private bool pulling_data;
+ internal bool transfering_data; /* true if we're pushing or pulling data */
- private static int count = 0;
- private int id = count++;
-
-#region Public Constructors
- public BindingManagerBase() {
+ #region Public Constructors
+ public BindingManagerBase()
+ {
}
#endregion // Public Constructors
#region Protected Instance Fields
protected EventHandler onCurrentChangedHandler;
protected EventHandler onPositionChangedHandler;
+#if NET_2_0
+ internal EventHandler onCurrentItemChangedHandler;
+#endif
#endregion // Protected Instance Fields
#region Public Instance Properties
get;
}
+#if NET_2_0
+ public bool IsBindingSuspended {
+ get {
+ return IsSuspended;
+ }
+ }
+#endif
+
public abstract int Position {
get; set;
}
public abstract void EndCurrentEdit();
+#if NET_2_0
+ public virtual PropertyDescriptorCollection GetItemProperties()
+ {
+ return GetItemPropertiesInternal ();
+ }
+
+ internal virtual PropertyDescriptorCollection GetItemPropertiesInternal ()
+ {
+ throw new NotImplementedException ();
+ }
+#else
public abstract PropertyDescriptorCollection GetItemProperties();
+#endif
public abstract void RemoveAt(int index);
public abstract void SuspendBinding();
#endregion // Public Instance Methods
+ internal virtual bool IsSuspended {
+ get {
+ return false;
+ }
+ }
+
#region Protected Instance Methods
[MonoTODO]
- protected internal virtual PropertyDescriptorCollection GetItemProperties(System.Collections.ArrayList dataSources, System.Collections.ArrayList listAccessors) {
+ protected internal virtual PropertyDescriptorCollection GetItemProperties (ArrayList dataSources, ArrayList listAccessors)
+ {
throw new NotImplementedException();
}
[MonoTODO]
- protected virtual PropertyDescriptorCollection GetItemProperties(Type lisType, int offset, System.Collections.ArrayList dataSources, System.Collections.ArrayList listAccessors) {
+ protected virtual PropertyDescriptorCollection GetItemProperties (Type listType, int offset, ArrayList dataSources, ArrayList listAccessors)
+ {
throw new NotImplementedException();
}
- protected internal abstract string GetListName (System.Collections.ArrayList listAccessors);
+ protected internal abstract string GetListName (ArrayList listAccessors);
protected internal abstract void OnCurrentChanged (EventArgs e);
protected void PullData()
{
- pulling_data = true;
try {
- UpdateIsBinding ();
- foreach (Binding binding in Bindings)
+ if (!transfering_data) {
+ transfering_data = true;
+ UpdateIsBinding ();
+ }
+ foreach (Binding binding in Bindings) {
binding.PullData ();
+ }
} finally {
- pulling_data = false;
+ transfering_data = false;
}
}
protected void PushData()
{
- if (pulling_data)
- return;
+ try {
+ if (!transfering_data) {
+ transfering_data = true;
+ UpdateIsBinding ();
+ }
+ foreach (Binding binding in Bindings) {
+ binding.PushData ();
+ }
+ } finally {
+ transfering_data = false;
+ }
+ }
+
+
+#if NET_2_0
+ protected void OnBindingComplete (BindingCompleteEventArgs args)
+ {
+ if (BindingComplete != null)
+ BindingComplete (this, args);
+ }
+
+ protected abstract void OnCurrentItemChanged (EventArgs e);
- UpdateIsBinding ();
- foreach (Binding binding in Bindings)
- binding.PushData ();
+ protected void OnDataError (Exception e)
+ {
+ if (DataError != null)
+ DataError (this, new BindingManagerDataErrorEventArgs (e));
}
+#endif
protected abstract void UpdateIsBinding();
#endregion // Protected Instance Methods
}
#region Events
- public event EventHandler CurrentChanged;
- public event EventHandler PositionChanged;
+ public event EventHandler CurrentChanged {
+ add { onCurrentChangedHandler += value; }
+ remove { onCurrentChangedHandler -= value; }
+ }
+
+ public event EventHandler PositionChanged {
+ add { onPositionChangedHandler += value; }
+ remove { onPositionChangedHandler -= value; }
+ }
+
+#if NET_2_0
+ public event EventHandler CurrentItemChanged {
+ add { onCurrentItemChangedHandler += value; }
+ remove { onCurrentItemChangedHandler -= value; }
+ }
+
+ public event BindingCompleteEventHandler BindingComplete;
+ public event BindingManagerDataErrorEventHandler DataError;
+#endif
#endregion // Events
}
}