Trzecie rozwiązanie:
To trochę więcej pracy z góry, lepiej jest w dłuższej perspektywie, jeśli wiążesz wiele ładunków. Użyj konwertera, który pobiera typ wyliczenia jako parametr i konwertuje go na tablicę łańcuchów jako wynik.
W 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
Albo w 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()
}
}
Następnie w Application.xaml
, dodać zasób globalny dostęp do tego konwertera:
<local:EnumToNamesConverter x:Key="EnumToNamesConverter" />
wreszcie korzystać konwerter na dowolnych stronach XAML, w których potrzebujesz wartości dowolnego Enum ...
<ComboBox ItemsSource="{Binding
Source={x:Type local:CompassHeading},
Converter={StaticResource EnumToNamesConverter}}" />
Właśnie przeczytałem ostatni wpis Eric Burke o klasie Swing JComboBox, która robi to i pomyślał: "Hej, przysięgam, widziałem pytanie SO o tym ..." Byłem blisko, ale chcesz WPF, nie Java/Swing . Tak czy inaczej, tutaj jest dla potomności: http://stuffthathappens.com/blog/2009/02/10/a-swing-jcombobox-for-enums/ – JMD