gpt4 book ai didi

c# - WPF 如何将带有描述的枚举绑定(bind)到 ComboBox

转载 作者:可可西里 更新时间:2023-11-01 08:43:37 24 4
gpt4 key购买 nike

如何将具有Description (DescriptionAttribute) 的enum 绑定(bind)到ComboBox

我有一个枚举:

public enum ReportTemplate
{
[Description("Top view")]
TopView,

[Description("Section view")]
SectionView
}

我试过这个:

<ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type System:Enum}"
x:Key="ReportTemplateEnum">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="Helpers:ReportTemplate"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

<Style x:Key="ReportTemplateCombobox" TargetType="dxe:ComboBoxEditSettings">
<Setter Property="ItemsSource"
Value="{Binding Source={x:Type Helpers:ReportTemplate}}"/>
<Setter Property="DisplayMember" Value="Description"/>
<Setter Property="ValueMember" Value="Value"/>
</Style>

无法成功,有什么简单的解决办法吗?

提前致谢!

最佳答案

这可以通过为您的组合框使用转换器和项目模板来完成。

这是转换器代码,绑定(bind)到枚举时将返回描述值:

namespace FirmwareUpdate.UI.WPF.Common.Converters
{
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;
}
}
}

然后在您的 xaml 中您需要使用和项目模板。

<ComboBox Grid.Row="1" Grid.Column="1"  Height="25" Width="100" Margin="5"
ItemsSource="{Binding Path=MyEnums}"
SelectedItem="{Binding Path=MySelectedItem}"
>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource enumDescriptionConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

关于c# - WPF 如何将带有描述的枚举绑定(bind)到 ComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15567913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com