public CustomExpressionView(IHostResourceProvider hostResources, PropertyViewModel viewModel) : base(hostResources, viewModel, Properties.Resources.CustomExpression, "pe-custom-expression-32") { Frame = new CGRect(CGPoint.Empty, new CGSize(250, 80)); Type vmType = viewModel.GetType(); PropertyInfo previewCustomExpressionPropertyInfo = vmType.GetProperty(PreviewCustomExpressionString); previewCustomExpressionPropertyInfo.SetValue(viewModel, string.Empty); PropertyInfo customExpressionPropertyInfo = vmType.GetProperty(CustomExpressionPropertyString); var value = customExpressionPropertyInfo.GetValue(viewModel); NSControl editorControl = null; PropertyInfo customAutocompleteItemsPropertyInfo = vmType.GetProperty(AutocompleteItemsString); if (customAutocompleteItemsPropertyInfo.GetValue(viewModel) is ObservableCollectionEx <string> values) { if (values != null && values.Count > 0) { editorControl = new AutocompleteComboBox(hostResources, viewModel, values, previewCustomExpressionPropertyInfo) { AccessibilityEnabled = true, AccessibilityTitle = Properties.Resources.AccessibilityCustomExpressionCombobox, } } ; } if (editorControl == null) { editorControl = new NSTextField { AccessibilityEnabled = true, AccessibilityTitle = Properties.Resources.AccessibilityCustomExpressionEditControl, } } ; editorControl.TranslatesAutoresizingMaskIntoConstraints = false; editorControl.StringValue = (string)value ?? string.Empty; editorControl.Activated += (sender, e) => { PopOver.CloseOnEnter = true; customExpressionPropertyInfo.SetValue(viewModel, editorControl.StringValue); }; AddSubview(editorControl); this.AddConstraints(new[] { NSLayoutConstraint.Create(editorControl, NSLayoutAttribute.Top, NSLayoutRelation.Equal, this, NSLayoutAttribute.Top, 1f, 37f), NSLayoutConstraint.Create(editorControl, NSLayoutAttribute.Left, NSLayoutRelation.Equal, this, NSLayoutAttribute.Left, 1f, 38f), NSLayoutConstraint.Create(editorControl, NSLayoutAttribute.Width, NSLayoutRelation.Equal, this, NSLayoutAttribute.Width, 1f, -57f), NSLayoutConstraint.Create(editorControl, NSLayoutAttribute.Height, NSLayoutRelation.Equal, 1f, PropertyEditorControl.DefaultControlHeight), }); } } }
public void LlenaCombo(ref AutocompleteComboBox combo, string SQL, string parametros = "", string ColValueMember = "", string ColDisplayMemeber = "", bool Autocompletar = false, string DescPrimerItem = "", string ValPrimerItem = "") { try { // Obtener datos desde la BD DataTable dt = objlnFunciones.GetInfoQueryDt(SQL + " " + parametros); // Revisar si se requiere agregar un primer item al ComboBox. if (DescPrimerItem.Trim() != "") { // Asignar los valores del primer elemento a un Datarow DataRow drPrimerItem = dt.NewRow(); // Revisar si el ValueMember y DisplayMember se establecen por defecto o bien en alguna columna especificada if (ColValueMember == "") { drPrimerItem[0] = ValPrimerItem; drPrimerItem[1] = DescPrimerItem; } else { drPrimerItem[ColValueMember] = ValPrimerItem; drPrimerItem[ColDisplayMemeber] = DescPrimerItem; } // Insertar el Datarow al inicio del DataTable dt.Rows.InsertAt(drPrimerItem, 0); } // Revisar si el ValueMember y DisplayMember se establecen por defecto o bien en alguna columna especificada if (ColValueMember == "") { combo.ValueMember = dt.Columns[0].Caption; combo.DisplayMember = dt.Columns[1].Caption; } else { combo.ValueMember = dt.Columns[ColValueMember].Caption; combo.DisplayMember = dt.Columns[ColDisplayMemeber].Caption; } // Llenar el combo con la información combo.DataSource = dt; // Revisar si el combo tendrá la función de autocompletar if (Autocompletar) { AutoCompleteStringCollection stringCol = new AutoCompleteStringCollection(); foreach (DataRow row in dt.Rows) { stringCol.Add(Convert.ToString(row[combo.DisplayMember])); } combo.AutoCompleteCustomSource = stringCol; combo.AutoCompleteMode = AutoCompleteMode.Suggest; combo.AutoCompleteSource = AutoCompleteSource.CustomSource; } } catch (Exception ex) { throw new Exception(ex.Message); } }