Третье решение:
Это немного более эффективная работа, лучше в долгосрочной перспективе, если вы привязаны к нагрузкам Enums. Используйте конвертер, который вводит тип перечисления в качестве параметра и преобразует его в массив строк в качестве вывода.
В VB.NET:
Public Class EnumToNamesConverter
Implements IValueConverter
Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
Return [Enum].GetNames(DirectCast(value, Type))
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
Или в C#:
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()
}
}
Затем в Application.xaml
, добавить глобальный ресурс этот конвертер:
<local:EnumToNamesConverter x:Key="EnumToNamesConverter" />
Наконец использовать конвертер на любых страницах XAML, где вам нужны значения любого Enum ...
<ComboBox ItemsSource="{Binding
Source={x:Type local:CompassHeading},
Converter={StaticResource EnumToNamesConverter}}" />
Я только что прочитал недавнее сообщение Эрика Берка о классе Swing JComboBox, который делает это, и подумал: «Эй, клянусь, я увидел вопрос SO об этом ...» Я был близок, но вы хотите WPF, а не Java/Swing , Во всяком случае, здесь для потомков: http://stuffthathappens.com/blog/2009/02/10/a-swing-jcombobox-for-enums/ – JMD