コード例 #1
0
ファイル: ValuePipeline.cs プロジェクト: danwalmsley/OmniXAML
        public object ConvertValueIfNecessary(object value, Type targetType)
        {
            if (IsAlreadyCompatible(value, targetType))
            {
                return value;
            }

            object converted;
            var success = TrySpecialConversion(value, targetType, out converted);
            if (success)
            {
                return converted;
            }

            var typeConverter = WiringContext.ConverterProvider.GetTypeConverter(targetType);
            if (typeConverter != null)
            {
                var context = new XamlTypeConverterContext(WiringContext.TypeContext);
                if (typeConverter.CanConvertFrom(context, value.GetType()))
                {
                    var anotherValue = typeConverter.ConvertFrom(context, CultureInfo.InvariantCulture, value);
                    return anotherValue;
                }
            }

            return value;
        }
コード例 #2
0
ファイル: ValuePipeline.cs プロジェクト: rdterner/OmniXAML
        public object ConvertValueIfNecessary(object value, XamlType targetType)
        {
            if (IsAlreadyCompatible(value, targetType.UnderlyingType))
            {
                return value;
            }

            object converted;
            var success = TrySpecialConversion(value, targetType.UnderlyingType, out converted);
            if (success)
            {
                return converted;
            }

            var typeConverter = targetType.TypeConverter;
            if (typeConverter != null)
            {
                var context = new XamlTypeConverterContext(typeRepository, topDownValueContext);
                if (typeConverter.CanConvertFrom(context, value.GetType()))
                {
                    var anotherValue = typeConverter.ConvertFrom(context, CultureInfo.InvariantCulture, value);
                    return anotherValue;
                }
            }

            return value;
        }
コード例 #3
0
        public object ConvertValueIfNecessary(object value, XamlType targetType)
        {
            if (IsAlreadyCompatible(value, targetType.UnderlyingType))
            {
                return(value);
            }

            object converted;
            var    success = TrySpecialConversion(value, targetType.UnderlyingType, out converted);

            if (success)
            {
                return(converted);
            }

            var typeConverter = targetType.TypeConverter;

            if (typeConverter != null)
            {
                var context = new XamlTypeConverterContext(typeRepository, topDownValueContext);
                if (typeConverter.CanConvertFrom(context, value.GetType()))
                {
                    var anotherValue = typeConverter.ConvertFrom(context, CultureInfo.InvariantCulture, value);
                    return(anotherValue);
                }
            }

            return(value);
        }
コード例 #4
0
        private object ConvertValueIfNecessary(object value, Type targetType)
        {
            object converted;
            var success = TrySpecialConversion(value, targetType, out converted);
            if (success)
            {
                return converted;
            }

            var typeConverter = typeConverterProvider.GetTypeConverter(targetType);
            if (typeConverter != null)
            {
                var context = new XamlTypeConverterContext(xamlTypeRepository);
                var anotherValue = typeConverter.ConvertFrom(context, CultureInfo.InvariantCulture, value);
                return anotherValue;
            }

            throw new ValueConversionException($"Cannot convert {value} to type {targetType}");
        }