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