public static object Convert(IBindingMemberInfo member, Type type, object value)
        {
            if (XamarinFormsToolkitExtensions.ValueConverter != null)
            {
                return(XamarinFormsToolkitExtensions.ValueConverter(member.Member as MemberInfo, type, value));
            }
            if (value == null)
            {
                return(type.GetDefaultValue());
            }
            if (type.IsInstanceOfType(value))
            {
                return(value);
            }
            if (BindingExtensions.IsConvertible(value))
            {
                return(System.Convert.ChangeType(value, type.GetNonNullableType(), BindingServiceProvider.BindingCultureInfo()));
            }
            if (type.GetTypeInfo().IsEnum)
            {
                var s = value as string;
                if (s != null)
                {
                    return(Enum.Parse(type, s, false));
                }

                return(Enum.ToObject(type, value));
            }

            if (type == typeof(string))
            {
                return(value.ToString());
            }
            return(value);
        }
Exemplo n.º 2
0
        public static object Convert(IBindingMemberInfo member, Type type, object value)
#endif
        {
            if (value == null)
            {
                return(type.GetDefaultValue());
            }
            if (type.IsInstanceOfType(value))
            {
                return(value);
            }

#if !WINDOWS_UWP && !NETFX_CORE
#if XAMARIN_FORMS
            var converter = GetTypeConverter(type, member);
#else
            var converter = GetTypeConverter(type, member.Member as MemberInfo);
#endif
            if (converter != null && converter.CanConvertFrom(value.GetType()))
            {
                return(converter.ConvertFrom(value));
            }
#endif

#if NETFX_CORE
#if XAMARIN_FORMS
            if (ConvertibleTypes.Contains(value))
#else
            if (BindingExtensions.IsConvertible(value))
#endif
#else
            if (value is IConvertible)
#endif
            { return(System.Convert.ChangeType(value, type.GetNonNullableType(), BindingServiceProvider.BindingCultureInfo())); }
#if WINDOWS_UWP || NETFX_CORE
            if (type.GetTypeInfo().IsEnum)
#else
            if (type.IsEnum)
#endif
            {
#if WINDOWS_UWP || NETFX_CORE
                var s = value as string;
                if (s != null)
                {
                    return(Enum.Parse(type, s, false));
                }
#endif
                return(Enum.ToObject(type, value));
            }

            if (type == typeof(string))
            {
                return(value.ToString());
            }
            return(value);
        }