2

我需要将所有枚举值显示为 TabControl 上的选项卡项,除了一个枚举成员(无)

enum MyEnum { Value1, Value2, Value3, None }

TabControl 应显示三个选项卡(Value1、Value2 和 Value3)。我需要能够通过绑定到 SelectedItem 属性来获取/设置 ViewModel 中的当前选项卡。每个选项卡的标题使用本地化枚举值,目前我使用转换器。

这可能吗?我已经尝试了很多东西,但无法让它发挥作用。手动添加每个 TabItem 没有问题,但我不确定如何使 SelectedItem (tab) 成为枚举类型。

4

2 回答 2

1

我找到了解决方案。通常你会这样做以获得枚举成员的列表:

<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>
于 2012-06-21T00:16:06.217 回答
0

副手,我不认为有办法做你想做的事。SelectedItem 将是一个 TabItem 对象,我认为没有办法在这里使用绑定转换器来欺骗它使用枚举。即使你能做到,也没有简单的方法让它神奇地识别枚举值之一是你不想绑定的值(即“无”)。

你最好的办法是把每个TabItem的Tag属性绑定到你想要的枚举上,用代码实现你想要的选择效果。

于 2012-06-20T23:29:30.940 回答