public static IEnumerable <EnumMemberInfo> GetEnumSource(Type enumType, bool useUnderlyingEnumValue = true, IValueConverter nameConverter = null, bool splitNames = false, EnumMembersSortMode sortMode = EnumMembersSortMode.Default, Func <string, bool, string> getKnownImageUriCallback = null, bool showImage = true, bool showName = true)
        {
            var result = enumType.GetFields(BindingFlags.Static | BindingFlags.Public)
                         .Where(field => DataAnnotationsAttributeHelper.GetAutoGenerateField(field))
                         .Select(field => {
                Enum value  = (Enum)field.GetValue(null);
                string name = GetEnumName(field, value, nameConverter, splitNames);

                var imageInfo     = GetImageInfo(MetadataHelper.GetAttribute <ImageAttribute>(field), MetadataHelper.GetAttribute <DXImageAttribute>(field), null, getKnownImageUriCallback);
                ImageSource image = (imageInfo.Item1 ?? imageInfo.Item2).With(x => (ImageSource) new ImageSourceConverter().ConvertFrom(x));

                return(new EnumMemberInfo(name, DataAnnotationsAttributeHelper.GetFieldDescription(field), useUnderlyingEnumValue ? GetUnderlyingEnumValue(value) : value, image, showImage, showName));
            });

            switch (sortMode)
            {
            case EnumMembersSortMode.DisplayName:
                result = result.OrderBy(x => x.Name);
                break;

            case EnumMembersSortMode.DisplayNameDescending:
                result = result.OrderByDescending(x => x.Name);
                break;

            case EnumMembersSortMode.DisplayNameLength:
                result = result.OrderBy(x => x.Name.Length);
                break;

            case EnumMembersSortMode.DisplayNameLengthDescending:
                result = result.OrderByDescending(x => x.Name.Length);
                break;
            }
            return(result.ToArray());
        }
        public static PropertyValidator FromAttributes(IEnumerable attributes, string propertyName)
        {
            try {
                var displayName          = DataAnnotationsAttributeHelper.GetDisplayName(attributes.OfType <Attribute>()) ?? propertyName;
                var validationAttributes = attributes != null?attributes.OfType <ValidationAttribute>().ToArray() : new ValidationAttribute[0];

                var dxValidationAttributes = attributes != null?attributes.OfType <DXValidationAttribute>().ToArray() : new DXValidationAttribute[0];

                return(validationAttributes.Any() || dxValidationAttributes.Any() ? new PropertyValidator(validationAttributes, dxValidationAttributes, propertyName, displayName) : null);
            } catch (TypeAccessException) {
                return(null);
            }
        }
示例#3
0
        static IAttributesProvider GetExternalAndFluentAPIAttrbutesCore(Type componentType)
        {
            IEnumerable <IAttributesProvider> result = new IAttributesProvider[0];

            foreach (var type in GetHierarchy(componentType))
            {
                IEnumerable <Type> metadataClassType = DataAnnotationsAttributeHelper.GetMetadataClassType(type)
                                                       .Return(x => new[] { x }, () => Enumerable.Empty <Type>());
                IEnumerable <Type> externalMetadataClassTypes = GetMetadataTypes(MetadataLocator.Default, type);
                result = result.Concat(metadataClassType.Concat(externalMetadataClassTypes).GetProviders(type));
                GetFluentAPIAttributesFromStaticMethod(type, type).Do(x => result = result.Concat(new[] { x }));
            }
            return(CompositeMetadataAttributesProvider.Create(result));
        }
        static string GetEnumName(FieldInfo field, Enum value, IValueConverter nameConverter, bool splitNames)
        {
            if (nameConverter != null)
            {
                return(nameConverter.Convert(value, typeof(string), null, CultureInfo.CurrentCulture) as string);
            }
            string displayName = DataAnnotationsAttributeHelper.GetFieldDisplayName(field);
            string name        = displayName ?? TypeDescriptor.GetConverter(value.GetType()).ConvertTo(value, typeof(string)) as string;

            if (splitNames && displayName == null)
            {
                return(SplitStringHelper.SplitPascalCaseString(name));
            }
            return(name);
        }
示例#5
0
        public static IEnumerable <EnumMemberInfo> GetEnumSource(Type enumType, bool useUnderlyingEnumValue = true, IValueConverter nameConverter = null,
                                                                 bool splitNames = false, EnumMembersSortMode sortMode = EnumMembersSortMode.Default, Func <string, bool, string> getKnownImageUriCallback = null,
                                                                 bool showImage  = true, bool showName = true, Func <string, ImageSource> getSvgImageSource = null, Size?imageSize = null)
        {
            if (enumType == null || !enumType.IsEnum)
            {
                return(Enumerable.Empty <EnumMemberInfo>());
            }
            Func <string, ImageSource> getImageSource = uri => (ImageSource) new ImageSourceConverter().ConvertFrom(uri);
            var result = enumType.GetFields(BindingFlags.Static | BindingFlags.Public)
                         .Where(field => DataAnnotationsAttributeHelper.GetAutoGenerateField(field))
                         .Select(field => {
                Enum value  = (Enum)field.GetValue(null);
                string name = GetEnumName(field, value, nameConverter, splitNames);

                var imageInfo               = GetImageInfo(MetadataHelper.GetAttribute <ImageAttribute>(field), MetadataHelper.GetAttribute <DXImageAttribute>(field), null, getKnownImageUriCallback);
                string imageUri             = ViewModelBase.IsInDesignMode ? null : (imageInfo.Item1 ?? imageInfo.Item2);
                Func <ImageSource> getImage = () => imageUri.With(TryGetImageSource(CanCreateSvgImageSource(getSvgImageSource, imageUri)
                        ? getSvgImageSource : getImageSource));
                return(new EnumMemberInfo(name, DataAnnotationsAttributeHelper.GetFieldDescription(field), useUnderlyingEnumValue ? GetUnderlyingEnumValue(value) : value,
                                          showImage, showName, getImage, imageSize, DataAnnotationsAttributeHelper.GetFieldOrder(field)));
            });

            switch (sortMode)
            {
            case EnumMembersSortMode.DisplayName:
                result = result.OrderBy(x => x.Name);
                break;

            case EnumMembersSortMode.DisplayNameDescending:
                result = result.OrderByDescending(x => x.Name);
                break;

            case EnumMembersSortMode.DisplayNameLength:
                result = result.OrderBy(x => x.Name.Length);
                break;

            case EnumMembersSortMode.DisplayNameLengthDescending:
                result = result.OrderByDescending(x => x.Name.Length);
                break;
            }
            return(result.OrderBy(x => (x.Order != null) ? x.Order : DefaultDisplayOrder).ToArray());
        }
示例#6
0
        static IAttributesProvider GetExtenalAndFluentAPIAttrbutesCore(Type componentType)
        {
            IEnumerable <IAttributesProvider> result = new IAttributesProvider[0];

            while (componentType != null)
            {
                Type metadataClassType = DataAnnotationsAttributeHelper.GetMetadataClassType(componentType);
                if (metadataClassType != null)
                {
                    result = result.Concat(GetAllMetadataAttributes(metadataClassType, componentType));
                }
                Type[] externalMetadataClassTypes = MetadataLocator.Default.With(x => x.GetMetadataTypes(GetTypeOrGenericTypeDefinition(componentType)));
                if (externalMetadataClassTypes != null)
                {
                    foreach (var externalMetadataClassType in externalMetadataClassTypes)
                    {
                        result = result.Concat(GetAllMetadataAttributes(externalMetadataClassType, componentType));
                    }
                }
                GetFluentAPIAttributesFromStaticMethod(componentType, componentType).Do(x => result = result.Concat(new[] { x }));
                componentType = componentType.BaseType;
            }
            return(new CompositeMetadataAttributesProvider(result.Where(x => x != null).ToArray()));
        }
示例#7
0
 internal override IEnumerable <object> GetConstructorParametersCore(Attribute attribute)
 {
     return(DataAnnotationsAttributeHelper.GetScaffoldColumnAttributeConstructorParameters(attribute));
 }
示例#8
0
 internal override LambdaExpression GetConstructorExpressionCore()
 {
     return(DataAnnotationsAttributeHelper.GetScaffoldColumnAttributeCreateExpression());
 }
示例#9
0
 internal override IEnumerable <Tuple <PropertyInfo, object> > GetPropertyValuePairsCore(Attribute attribute)
 {
     return(DataAnnotationsAttributeHelper.GetDisplayAttributePropertyValuePairs(attribute));
 }