public PresentedParameter Present(IParameterDescriptor param, Action updateCallback)
        {
            var textBox = new TextBox {
                MaxLength = param.ValueType == typeof(char) ? 1 : 128
            };

            textBox.TextChanged += (sender, args) => updateCallback();
            void Setter(object val) => textBox.Text = param.ConvertValueToString(val ?? "");
            object Getter() => param.ParseValueFromString(textBox.Text ?? "");

            void Updater(ParameterStateType state, bool value)
            {
                switch (state)
                {
                case ParameterStateType.Enabled:
                    textBox.IsEnabled = value;
                    break;

                case ParameterStateType.Valid:
                    textBox.Background = value ? Brushes.Transparent : new SolidColorBrush(ViewConstants.InvalidColor);
                    break;
                }
            }

            return(new PresentedParameter(param, textBox, new PresentedParameter.ParamDelegates(Getter, Setter, param.IsValid, Updater)));
        }
Esempio n. 2
0
        public PresentedParameter Present(IParameterDescriptor param, Action updateCallback)
        {
            string ToStrFunc(object value) => param.ConvertValueToString(value);

            IEnumerable items;

            if (SelectableValuesFuncProperty.TryGet(param.Metadata, out var selectableValuesFunc))
            {
                items = selectableValuesFunc(param);
            }
            else if (param.IsSelectable())
            {
                items = param.SelectableValues;
            }
            else
            {
                throw new ProgrammingException("Parameter.SelectableValues or SelectablePresenter.SelectableValuesFuncProperty must be assigned");
            }

            var comboBox = new ComboBox {
                ItemsSource = ToStringOverridenWrapper.Of(items, ToStrFunc)
            };

            comboBox.SelectionChanged += (sender, args) => updateCallback();
            void Setter(object val) => comboBox.SelectedValue = ToStringOverridenWrapper.Wrap(val, ToStrFunc);
            object Getter() => ToStringOverridenWrapper.TryUnwrap(comboBox.SelectedValue);

            void Updater(ParameterStateType state, bool value)
            {
                if (state == ParameterStateType.Enabled)
                {
                    comboBox.IsEnabled = value;
                }
            }

            return(new PresentedParameter(param, comboBox, new PresentedParameter.ParamDelegates(Getter, Setter, value => value != null, Updater)));
        }