解決策を見つけました。通常、enum メンバーのリストを取得するには、次のようにします。
<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>