Una tercera solución:
Esto supone un poco más de trabajo por adelantado, mejor es más fácil a largo plazo si enlaza muchos Enumera. Utilice un convertidor que tome el tipo de enumeración como un parámetro, y lo convierta en una matriz de cadenas como salida.
En 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 en 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()
}
}
Luego, en su Application.xaml
, añadir un recurso global para acceder a este convertidor:
<local:EnumToNamesConverter x:Key="EnumToNamesConverter" />
utilizar último el convertidor en cualquier página XAML donde necesite los valores de cualquier Enum ...
<ComboBox ItemsSource="{Binding
Source={x:Type local:CompassHeading},
Converter={StaticResource EnumToNamesConverter}}" />
Acabo de leer la reciente publicación de Eric Burke sobre una clase Swing JComboBox que hace esto, y pensé "Oye, te juro que vi una ASISTA pregunta sobre esto ..." Estaba cerca, pero quieres WPF, no Java/Swing . De todos modos, aquí está para la posteridad: http://stuffthathappens.com/blog/2009/02/10/a-swing-jcombobox-for-enums/ – JMD