WPF将ListBox绑定到枚举,显示Description属性

是否可以使用ObjectDataProvider方法将ListBox绑定到枚举,并以某种方式设置其样式以显示Description属性?如果是这样,人们将如何去做……?

回答:

是的,有可能。这样就可以了。说我们有枚举

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作为扩展方法。

以上是 WPF将ListBox绑定到枚举,显示Description属性 的全部内容, 来源链接: utcz.com/qa/427587.html

回到顶部