问题描述
我想用下面的enum
至List<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;
}
基本上,我不想为MyEnumA
,MyEnumB
等硬编码上面的示例。
感谢您的见解:-)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)