protected override void OnActivityChanged(ActivityChangedEventArgs e) { Trace.WriteLine("ConnectorActivity - OnActivityChanged"); base.OnActivityChanged(e); if (e.Member != null) { if (e.Member.Name == "Type") { if (base.Activity.Site != null) { Activity activity = e.Activity; PropertyDescriptor descriptor = TypeDescriptor.GetProperties(base.Activity)["MethodName"]; if (descriptor != null) { descriptor.SetValue(base.Activity, string.Empty); } } } else if (e.Member.Name == "MethodName") { ConnectorActivity activity = e.Activity as ConnectorActivity; if (activity != null) { activity.Parameters.Clear(); // refreshing corresponding ReturnActivity if (activity.Parent != null) { foreach (Activity item in activity.Parent.Activities) { if ((item is ReturnActivity) && (((ReturnActivity)item).ConnectorActivityName == base.Activity.QualifiedName)) { (item as ReturnActivity).ConnectorActivityName = string.Empty; (item as ReturnActivity).Parameters.Clear(); TypeDescriptor.Refresh(item); } } } } } if ((e.Member.Name == "Type") || (e.Member.Name == "MethodName")) { TypeDescriptor.Refresh(e.Activity); } } }
protected override void PreFilterProperties(IDictionary properties) { base.PreFilterProperties(properties); ConnectorActivity activity = this.Activity as ConnectorActivity; if (activity != null && activity.Type != null && activity.MethodName != null) { MethodInfo mi = activity.Type.GetMethod(activity.MethodName); if (mi != null) { //get the parameters and add them as properties ParameterInfo[] pis = mi.GetParameters(); if (pis != null) { foreach (ParameterInfo pi in pis) { //add a new parameter properties[pi.Name] = new ParameterBindingPropertyDescriptor <ConnectorActivity>(pi.Name, pi.ParameterType, new Attribute[] { new DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden), new BrowsableAttribute(true), new CategoryAttribute("Parameters"), new DescriptionAttribute(pi.ParameterType.FullName), new EditorAttribute(typeof(BindUITypeEditor), typeof(UITypeEditor)) }); } } } } }