如何使用通用枚举填充WPF组合框到List <string>函数

问题描述

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

如何在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,CultureInfo culture) => Binding.Donothing;
}

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

感谢您的见解:-)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)