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

6
我已经阅读了这个与WPF中将枚举属性绑定到ComboBox的问题相关的SO帖子,由于答案中的链接,它非常有用。现在我只是遇到一个问题,就是如何使用MVVM模式使其全部正常工作。

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

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个回答

4

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

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

另一种选择是添加标记扩展,将枚举值转换为值列表。


这可能是最简单的方法,但我认为不适合我,因为我的 DataContext 是我的 ViewModel,这是我绑定所有命令和其他组合框的方式。我有大量其他的 GUI 元素,而不仅仅是一个组合框。至于“其他选项”,我以为我在问题中发布的标记就是如何从枚举产生值列表的? - Dave
可能没有纯XAML的方法来完成它,我认为使用常规的C#会更容易。在我们的ViewModel中创建一个名为MyTypesValues的属性,并绑定到它({Binding MyTypesValues})。 - Andrey

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接