我需要将所有枚举值显示为 TabControl 上的选项卡项,除了一个枚举成员(无)
enum MyEnum { Value1, Value2, Value3, None }
TabControl 应显示三个选项卡(Value1、Value2 和 Value3)。我需要能够通过绑定到 SelectedItem 属性来获取/设置 ViewModel 中的当前选项卡。每个选项卡的标题都使用本地化的枚举值,目前我使用转换器进行此操作。
这可能吗?我尝试了很多东西,但无法使其发挥作用。我手动添加每个 TabItem 没有问题,但我不确定如何使 SelectedItem (选项卡)成为枚举类型。
我找到了解决方案。通常,您会这样做以获得枚举成员的列表:
<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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)