将枚举数据绑定到WPF中的组合框+;MVVM

将枚举数据绑定到WPF中的组合框+;MVVM,wpf,data-binding,mvvm,combobox,enums,Wpf,Data Binding,Mvvm,Combobox,Enums,我已经读过了,它非常有用,因为答案中有链接。我现在遇到了一个问题,那就是如何在MVVM模式下完成额外的步骤 假设我有我的ViewModel,它(甚至模型)可以定义一个枚举: public enum MyTypes { Type1, Type2, Type3 }; 我想将其数据绑定到GUI中的组合框。根据本文,我将使用ObjectDataProvider调用MyTypes上的Enum.GetValues()方法。因此,我必须将MyTypes作为MethodParameter传递。但是你怎么通过打

我已经读过了,它非常有用,因为答案中有链接。我现在遇到了一个问题,那就是如何在MVVM模式下完成额外的步骤

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

public enum MyTypes { Type1, Type2, Type3 };
我想将其数据绑定到GUI中的组合框。根据本文,我将使用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>


我放在那里的东西几乎都不会编译。有人知道如何克服这个小障碍吗?

最简单的方法是在代码中添加这一行:

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

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

请参阅我在这篇文章中的答案:

简而言之,在ObjectDataProvider.MethodParameters中,参数应引用命名空间中引用的枚举类型名称,即

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


这可能是最简单的,但我认为这不合适,因为我的DataContext就是我的ViewModel,这就是我绑定所有命令和其他组合框的方式。除了一个组合框之外,我还有很多其他GUI元素。至于“其他选项”,我认为我在问题中发布的标记是如何从enum生成值列表?纯XAML可能无法做到这一点。在我看来,用常规C#做起来容易多了。在ViewModel中创建一个名为MyTypesValue的属性,然后绑定到。({Binding MyTypesValues})。