wpf - 如何使用通用枚举填充 WPF 组合框以列出功能
问题描述
我想用下面的通用填充 WPF 组合框(和其他类似的控件enum
)List<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;
}
基本上,我不想对上面的示例进行硬编码MyEnumA
,MyEnumB
等等。
感谢您的任何见解:-)
解决方案
推荐阅读
- swift - 如何在不破坏其他单元格的情况下为集合视图插入设置动画?
- r - 如何在 R bookdown 文档中有一个 toc_float?
- java - 二次规划的舍入问题
- reactjs - 如何使用 if 和 else 语句更改 react-table 内的按钮?
- sql - 使用 R 以编程方式将变量名称及其数据类型写入 Teradata?
- c - c中的回文问题
- flutter - Flutter:从托管解析 json 时,类型“String”不是“int”类型的子类型
- c - 如何解决 MISRA C:2012 规则 11.6?
- dart - 周期性流不发送数据
- android - 为什么将产品风味添加到我的库 build.gradle 文件会导致我的本地应用程序无法解析从所述库导入的依赖项?