是的,有可能。这样就可以了。说我们有枚举
public enum MyEnum{ [Description("MyEnum1 Description")] MyEnum1, [Description("MyEnum2 Description")] MyEnum2, [Description("MyEnum3 Description")] MyEnum3}然后我们可以使用ObjectDataProvider作为
xmlns:MyEnumerations="clr-namespace:MyEnumerations"<ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="MyEnumValues"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="MyEnumerations:MyEnum" /> </ObjectDataProvider.MethodParameters></ObjectDataProvider>对于ListBox,我们将ItemsSource设置为MyEnumValues,并使用Converter来应用ItemTemplate。
<ListBox Name="c_myListBox" SelectedIndex="0" Margin="8" ItemsSource="{Binding Source={StaticResource MyEnumValues}}"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}"/> </DataTemplate> </ListBox.ItemTemplate></ListBox>在转换器中,我们得到描述并返回
public class EnumDescriptionConverter : IValueConverter{ private string GetEnumDescription(Enum enumObj) { FieldInfo fieldInfo = enumObj.GetType().GetField(enumObj.ToString()); object[] attribArray = fieldInfo.GetCustomAttributes(false); if (attribArray.Length == 0) { return enumObj.ToString(); } else { DescriptionAttribute attrib = attribArray[0] as DescriptionAttribute; return attrib.Description; } } object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) { Enum myEnum = (Enum)value; string description = GetEnumDescription(myEnum); return description; } object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return string.Empty; }}GetEnumDescription方法可能应该放在其他地方,但您会明白的:)
选中GetEnumDescription作为扩展方法。



