| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Markup;
- namespace TeamAAS_VP.Extension
- {
- public class EnumBindingSourceExtension : MarkupExtension
- {
- private Type _enumType;
- public Type EnumType
- {
- get => _enumType;
- set
- {
- if (value != _enumType)
- {
- if (value != null)
- {
- Type enumType = Nullable.GetUnderlyingType(value) ?? value;
- if (!enumType.IsEnum)
- throw new ArgumentException("Type must be for an Enum.");
- }
- _enumType = value;
- }
- }
- }
- public EnumBindingSourceExtension() { }
- public EnumBindingSourceExtension(Type enumType)
- {
- EnumType = enumType;
- }
- public override object ProvideValue(IServiceProvider serviceProvider)
- {
- if (_enumType == null)
- throw new InvalidOperationException("The EnumType must be specified.");
- var actualEnumType = Nullable.GetUnderlyingType(_enumType) ?? _enumType;
- var enumValues = Enum.GetValues(actualEnumType);
- if (actualEnumType == _enumType)
- return enumValues;
- var tempArray = Array.CreateInstance(actualEnumType, enumValues.Length + 1);
- enumValues.CopyTo(tempArray, 1);
- return tempArray;
- }
- }
- }
|