コード例 #1
0
        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);
        }
コード例 #2
0
 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}'"));
 }
コード例 #3
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)));
        }
コード例 #4
0
 public static bool TryGetPersistentTypeConverter(this IParameterDescriptor parameter, out ITypeConverter converter) =>
 PersistentTypeConverterProperty.TryGet(parameter.Metadata, out converter) && converter != null;
コード例 #5
0
 public static IParameterizedObjectFactory GetParameterizedObjectFactory(this IParameterDescriptor parameter) =>
 FactoryProperty.TryGet(parameter.Metadata, out var factory) ? factory : GetParameterizedObjectFactory(parameter.ValueType);