首页 > 解决方案 > 如何使用通用枚举填充 WPF 组合框以列出功能

问题描述

我想用下面的通用填充 WPF 组合框(和其他类似的控件enumList<string>

如何在 XAML 中调用它?

public class ToList<TEnum> : List<string> where TEnum : struct, Enum
{
    public static ToList()
    {
        foreach (TEnum e in Enum.GetValues(typeof(TEnum)))
        {
            // Skips some values (TEnum.NotDefined)
            if (e.Equals((TEnum)Enum.ToObject(typeof(TEnum), -1))) continue;
            
            // GetDescription() is an extension method based on the [Description] attribute
            Add(e.GetDescription());
        }
     }
}

硬编码枚举示例

MyEnum具有视图模型属性的XAML

<converters:MyEnumToStringConverter x:Key="MyEnumToString"/>
...
<ComboBox ItemsSource="{StaticResource MyEnumList}" SelectedItem="{Binding MyEnum, Converter=MyEnumToString}">

非泛型枚举到列表方法

public class MyEnumList : List<string>
{
    public MyEnumList()
    {
        foreach (MyEnum myEnum in Enum.GetValues(typeof(MyEnum)))
        {
            if (myEnum == myEnum.NotDefined) continue;

            Add(myEnum.GetDescription());
        }
    }   
}

价值转换器(未来可能会进行文化本地化)。我可以将枚举作为 targetType 或参数传递吗?

public class MyEnumToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) => ((MyEnum)value).GetDescription();

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => Binding.DoNothing;
}

基本上,我不想对上面的示例进行硬编码MyEnumAMyEnumB等等。

感谢您的任何见解:-)

标签: wpfgenericsenumsvalueconverter

解决方案


推荐阅读