我找到了解决方案。通常你会这样做以获得枚举成员的列表:
<ObjectDataProvider x:Key="SomeEnumValues"
MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="vm:SomeEnum" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
这将获得所有成员,所以它不是一条路要走。我创建了一个自定义转换器,它将接受枚举值,并从类型中提取所有成员
// in the convert method
Type type = value.GetType();
List<object> enumValues = new List<object>();
// add each member, except None (has value of 0)
foreach (var field in type.GetFields())
{
if (field.IsLiteral)
{
var x = field.GetValue(null);
// add new value
if ((int)x != 0)
enumValues.Add(field.GetValue(null));
}
}
本地化在 ItemTemplate 中完成。在那里,我还使用了转换器(不同的转换器),在那里我得到了本地化的值。
<DataTemplate x:Key="EnumItemTemplate">
<TextBlock Text="{Binding Mode=OneWay, Converter={StaticResource enumConverter}}"/>
</DataTemplate>