Filtration/Filtration.Common/Extensions/EnumerationExtension.cs

65 lines
1.8 KiB
C#
Raw Normal View History

2015-06-04 13:15:54 -04:00
using System;
using System.ComponentModel;
using System.Linq;
using System.Windows.Markup;
2018-08-29 13:12:02 -04:00
namespace Filtration.Common.Extensions
2015-06-04 13:15:54 -04:00
{
2018-08-29 13:12:02 -04:00
public class EnumerationExtension : MarkupExtension
2015-06-04 13:15:54 -04:00
{
private Type _enumType;
public EnumerationExtension(Type enumType)
{
if (enumType == null) throw new ArgumentNullException(nameof(enumType));
2015-06-04 13:15:54 -04:00
EnumType = enumType;
}
public Type EnumType
{
get
{
return _enumType;
}
private set
{
if (_enumType == value) return;
var enumType = Nullable.GetUnderlyingType(value) ?? value;
if (enumType.IsEnum == false) throw new ArgumentException("Type must be an Enum.");
_enumType = value;
}
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
var enumValues = Enum.GetValues(EnumType);
return (from object enumValue in enumValues
select new EnumerationMember { Value = enumValue, Description = GetDescription(enumValue) }).ToArray
();
}
private string GetDescription(object enumValue)
{
var descriptionAttribute =
EnumType.GetField(enumValue.ToString())
.GetCustomAttributes(typeof(DescriptionAttribute), false)
.FirstOrDefault() as DescriptionAttribute;
return descriptionAttribute != null ? descriptionAttribute.Description : enumValue.ToString();
}
public class EnumerationMember
{
public string Description { get; set; }
public object Value { get; set; }
}
}
}