public static bool TryGetPersistentTypeConverter(this IParameterDescriptor parameter, out ITypeConverter converter) { var flag = PersistentTypeConverterProperty.TryGet(parameter.Metadata, out converter) && converter != null; if (!flag) { return(false); } if (!converter.InputType.IsAssignableFrom(parameter.ValueType)) { throw new ArgumentException($"invalid type converter ({converter.InputType.Name}<==>{converter.OutputType.Name}) for parameter '{parameter.Key}'."); } return(true); }
public static IPresenter GetPresenter(this IParameterDescriptor param) { if (PresenterProperty.TryGet(param.Metadata, out var presenter)) { return(presenter); } if (TryGetPresentTypeConverter(param, out _)) { return(TypeConvertedPresenter.Instance); } if (param.IsSelectable()) { return(SelectablePresenter.Instance); } if (param.IsMultiValue()) { return(MultiValuePresenter.Instance); } return(GetPresenter(param.ValueType) ?? throw new NotSupportedException($"presenter not found for type '{param.ValueType}'")); }
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))); }
public static bool TryGetPersistentTypeConverter(this IParameterDescriptor parameter, out ITypeConverter converter) => PersistentTypeConverterProperty.TryGet(parameter.Metadata, out converter) && converter != null;
public static IParameterizedObjectFactory GetParameterizedObjectFactory(this IParameterDescriptor parameter) => FactoryProperty.TryGet(parameter.Metadata, out var factory) ? factory : GetParameterizedObjectFactory(parameter.ValueType);