【问题标题】:Databinding an enum to a ComboBox in WPF + MVVM将枚举数据绑定到 WPF + MVVM 中的 ComboBox
【发布时间】:2011-02-06 04:32:18
【问题描述】:

我已阅读 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>

我放在那里的几乎所有内容都无法编译。有谁知道如何克服这个小障碍?

【问题讨论】:

    标签: wpf data-binding mvvm combobox enums


    【解决方案1】:

    在这个 SO 帖子中查看我的答案:How to declare combobox itemTemplate that has Itemsource as Enum Values in WPF?

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 这可能是最简单的,但我认为它不合适,因为我的 DataContext 是我的 ViewModel,这是我绑定所有命令和其他组合框的方式。除了一个组合框,我还有很多其他的 GUI 元素。至于“其他选项”,我认为我在问题中发布的标记是如何从枚举中生成值列表?
      • 纯 XAML 可能无法做到这一点。在我看来,使用常规 C# 更容易完成。在我们的 ViewModel 中创建一个名为 MyTypesValues 的属性,然后绑定到其中。 ({Binding MyTypesValues})。
      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 2019-06-23
      • 2010-10-29
      • 1970-01-01
      相关资源
      最近更新 更多