public Dictionary <IAction, PropertyInfo[]> QueryCompatibleProperty(IAction action, BindingAttribute bindingAttribute, PropertyInfo propertyInfo) { if (_actionElements == null || _actionElements.Count == 0) { return(null); } Dictionary <IAction, PropertyInfo[]> atts = new Dictionary <IAction, PropertyInfo[]>(); // foreach (ActionElement ele in _actionElements) { IAction act = ele.Action; if (act.Equals(action)) { continue; } Dictionary <PropertyInfo, BindingAttribute> ps = ArgBindingHelper.GetBindingProperties(act.GetType()); List <PropertyInfo> infos = new List <PropertyInfo>(); foreach (PropertyInfo info in ps.Keys) { infos.Clear(); BindingAttribute ba = ps[info]; if (!bindingAttribute.SemanticType.Equals(ba.SemanticType)) { continue; } if (!propertyInfo.PropertyType.Equals(info.PropertyType)) { continue; } if (ba.Direction == enumBindingDirection.Input || ba.Direction == enumBindingDirection.None) { continue; } infos.Add(info); } if (infos.Count > 0) { atts.Add(act, infos.ToArray()); } } return(atts); }
private void BuildControls() { Type type = _action.GetType(); Dictionary <PropertyInfo, BindingAttribute> properites = ArgBindingHelper.GetBindingProperties(type); if (properites == null || properites.Count == 0) { return; } int top = 20; BindingPair[] pairs = null; if (_bindingEnvironment != null) { pairs = _bindingEnvironment.GetBindingPairs(_action); } foreach (PropertyInfo p in properites.Keys) { BindingAttribute att = properites[p]; if (att.Direction == enumBindingDirection.None || att.Direction == enumBindingDirection.Output) { continue; } top = CreateLabel(top, p, att); top = CreateInputControl(top, p, att, pairs); } foreach (Control c in panelTop.Controls) { if (c is ComboBox || c is ListBox) { c.Anchor = c.Anchor | AnchorStyles.Right; } else if (c is Button) { c.Anchor = AnchorStyles.Top | AnchorStyles.Right; } } }