using System; using System.Windows.Markup; namespace Gestor.Common.Helpers { public class EnumBindingSourceExtension : MarkupExtension { private Type _enumType; public Type EnumType { get { return this._enumType; } set { if (value == this._enumType) { return; } if (null != value) { if (!(Nullable.GetUnderlyingType(value) ?? value).IsEnum) { throw new ArgumentException("Type must be for an Enum."); } } this._enumType = value; } } public EnumBindingSourceExtension() { } public EnumBindingSourceExtension(Type enumType) { this.EnumType = enumType; } public override object ProvideValue(IServiceProvider serviceProvider) { if (null == this._enumType) { throw new InvalidOperationException("The EnumType must be specified."); } Type underlyingType = Nullable.GetUnderlyingType(this._enumType) ?? this._enumType; Array values = Enum.GetValues(underlyingType); if (underlyingType == this._enumType) { return values; } Array arrays = Array.CreateInstance(underlyingType, values.Length + 1); values.CopyTo(arrays, 1); return arrays; } } }