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))); }
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))); }