Третье решение:
Это немного сложнее, чем раньше, тем лучше в долгосрочной перспективе, если вы привязаны к нагрузкам 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}}" />