Una terza soluzione:
Questo è un po 'più di lavoro in anticipo, meglio è più facile a lungo termine se si sta vincolando a un sacco di Enum. Utilizzare un convertitore che accetta il tipo dell'enumerazione come parametro e lo converte in una matrice di stringhe come output.
In 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
O in 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()
}
}
Poi, nel tuo Application.xaml
, aggiungere una risorsa globale per accedere a questo convertitore:
<local:EnumToNamesConverter x:Key="EnumToNamesConverter" />
Infine usare il convertitore in qualsiasi pagina XAML in cui sono necessari i valori di qualsiasi Enum ...
<ComboBox ItemsSource="{Binding
Source={x:Type local:CompassHeading},
Converter={StaticResource EnumToNamesConverter}}" />
Ho appena letto il post recente di Eric Burke su una classe Swing JComboBox che fa questo, e ho pensato "Ehi, giuro di aver visto una domanda così su questo ..." ero vicino, ma tu vuoi WPF, non Java/Swing . Comunque, eccolo per i posteri: http://stuffthathappens.com/blog/2009/02/10/a-swing-jcombobox-for-enums/ – JMD