Exemplo n.º 1
0
        public IType ResolveType(ITypeResolver typeResolver)
        {
            IType type = (IType)null;

            if (this.type != (Type)null)
            {
                type = typeResolver.GetType(this.type);
            }
            else if (this.IsCollection)
            {
                type = typeResolver.ResolveType(PlatformTypes.Array);
            }
            else if (!this.HasChildren)
            {
                type = typeResolver.ResolveType(PlatformTypes.String);
            }
            return(DesignDataHelper.GetSourceType(type, typeResolver));
        }
Exemplo n.º 2
0
        private static BindingPropertyCompatibility GetPropertyCompatibility(BindingPropertyMatchInfo propertyInfo, IType dataType, ITypeResolver typeResolver)
        {
            IType sourceType = DesignDataHelper.GetSourceType(dataType, typeResolver);

            if (PlatformTypes.String.IsAssignableFrom((ITypeId)sourceType) && !PlatformTypes.String.IsAssignableFrom((ITypeId)propertyInfo.PropertyType) && PlatformTypes.IEnumerable.IsAssignableFrom((ITypeId)propertyInfo.PropertyType))
            {
                return(BindingPropertyCompatibility.None);
            }
            if (propertyInfo.NullableNormalizedPropertyType.IsAssignableFrom((ITypeId)sourceType) || propertyInfo.PropertyType.IsAssignableFrom((ITypeId)sourceType) || propertyInfo.PropertyType.IsBinding)
            {
                return(BindingPropertyCompatibility.Assignable);
            }
            TypeConverter typeConverter = propertyInfo.Property.TypeConverter ?? propertyInfo.Property.PropertyType.TypeConverter;

            if (typeConverter != null && typeConverter.CanConvertFrom(sourceType.RuntimeType) && (!PlatformTypes.String.IsAssignableFrom((ITypeId)sourceType) || !PlatformTypes.IConvertible.IsAssignableFrom((ITypeId)propertyInfo.NullableNormalizedPropertyType)))
            {
                return(BindingPropertyCompatibility.Convertible);
            }
            return(PlatformTypes.String.IsAssignableFrom((ITypeId)propertyInfo.PropertyType) ? BindingPropertyCompatibility.StringSpecial : BindingPropertyCompatibility.None);
        }