第一种,通过绑定转换器:
public sealed class EnumToNamesConverter : IValueConverter { object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) { return Enum.GetNames(value.GetType()); } object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw New NotSupportedException() } }
XAML
<local:EnumToNamesConverter x:Key="EnumToNamesConverter" />
<ComboBox ItemsSource="{Binding Source={x:Type local:CompassHeading}, Converter={StaticResource EnumToNamesConverter}}" />
第二种,经典呀!通过继承MarkupExtension
[MarkupExtensionReturnType(typeof(object[]))] public class EnumValuesExtension : MarkupExtension { public EnumValuesExtension() { } public EnumValuesExtension(Type enumType) { this.EnumType = enumType; } [ConstructorArgument("enumType")] public Type EnumType { get; set; } public override object ProvideValue(IServiceProvider serviceProvider) { if (this.EnumType == null) throw new ArgumentException("The enum type is not set"); return Enum.GetValues(this.EnumType); } }
XAML
<ComboBox ItemsSource="{local:EnumValues local:EmployeeType}"/>