You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.5 KiB
52 lines
1.5 KiB
using System;
|
|
using System.Windows.Markup;
|
|
|
|
namespace eCompanies
|
|
{
|
|
public class EnumBindingSourceExtension : MarkupExtension
|
|
{
|
|
private Type _enumType;
|
|
public Type EnumType
|
|
{
|
|
get { return this._enumType; }
|
|
set
|
|
{
|
|
if (value != this._enumType)
|
|
{
|
|
if (null != value)
|
|
{
|
|
Type enumType = Nullable.GetUnderlyingType(value) ?? value;
|
|
|
|
if (!enumType.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 actualEnumType = Nullable.GetUnderlyingType(this._enumType) ?? this._enumType;
|
|
Array enumValues = Enum.GetValues(actualEnumType);
|
|
|
|
if (actualEnumType == this._enumType)
|
|
return enumValues;
|
|
|
|
Array tempArray = Array.CreateInstance(actualEnumType, enumValues.Length + 1);
|
|
enumValues.CopyTo(tempArray, 1);
|
|
return tempArray;
|
|
}
|
|
}
|
|
}
|
|
|