将枚举数据绑定到WPF + MVVM中的ComboBox

时间:2010-04-09 14:36:18

标签: wpf data-binding mvvm combobox enums

我已阅读this very related question here on SO,由于答案中的链接,它非常有用。我现在只是遇到了一个问题,即使采用MVVM模式也可以使用它。

假设我有我的ViewModel,它(或者甚至模型)可以定义一个枚举:

public enum MyTypes { Type1, Type2, Type3 };

我想在GUI中将其数据绑定到ComboBox。根据这篇文章,我将使用ObjectDataProvider来调用MyTypes上的Enum.GetValues()方法。所以我必须将MyTypes作为MethodParameter传递。但你怎么通过这种类型?我尝试了各种方法,比如在XAML中添加对命名空间的引用:

    <Window.Resources>
        <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="TipHandlingValues">
            <ObjectDataProvider.MethodParameters>
                <!-- what goes here?  it's totally wrong. -->
                <my:MyTypes />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>

我放在那里的任何东西都会编译。有谁知道如何克服这个小障碍?

2 个答案:

答案 0 :(得分:4)

最简单的方法是在代码中添加以下行:

DataContext = Enum.GetValues(typeof(MyTypes));

其他选项是添加标记扩展,从而生成枚举值列表。

答案 1 :(得分:4)

请参阅我在这篇SO帖子上的回答:How to declare combobox itemTemplate that has Itemsource as Enum Values in WPF?

简而言之,在ObjectDataProvider.MethodParameters中应引用名称空间中引用的Enum类型名称,即

<ObjectDataProvider.MethodParameters>
  <x:Type TypeName="my:MyTypes"/>
</ObjectDataProvider.MethodParameters>