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),
            });
        }
    }
}
예제 #2
0
        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);
            }
        }