C# 如何将枚举绑定到WPF中的组合框的依赖项属性?

C# 如何将枚举绑定到WPF中的组合框的依赖项属性?,c#,wpf,xaml,combobox,enums,C#,Wpf,Xaml,Combobox,Enums,我已经读了好几篇文章和stackoverflow帖子,但我仍然有点执着于如何使这项工作顺利进行 我有一个要绑定到依赖项属性的枚举列表,然后将其绑定到一个组合框。加载程序时,组合框为空 一旦这是工作,我想在框中显示名称(即附件)和十六进制作为值 XAML: <ComboBox ItemsSource="{Binding BodyTypeFlags}" /> 编辑: 我已经按照建议做了,现在可以在组合框中看到枚举项列表。我有两个问题: 如果我保持枚举的原样(Name=Hex),那么当我

我已经读了好几篇文章和stackoverflow帖子,但我仍然有点执着于如何使这项工作顺利进行

我有一个要绑定到依赖项属性的枚举列表,然后将其绑定到一个组合框。加载程序时,组合框为空

一旦这是工作,我想在框中显示名称(即附件)和十六进制作为值

XAML:

<ComboBox ItemsSource="{Binding BodyTypeFlags}" />
编辑: 我已经按照建议做了,现在可以在组合框中看到枚举项列表。我有两个问题:

  • 如果我保持枚举的原样(Name=Hex),那么当我单击test按钮时,什么都不会出现
  • 如果我删除=六角部分(所以,它只是有附件和腮红),然后测试按钮将回来与附件-每次。即使我选择了腮红。(我不想更改枚举格式,但这告诉我双向绑定不起作用。)

  • 尝试以下解决方案:

    通常,必须使用对象包装枚举。 查看注释掉的代码,了解如何检索枚举的名称

    XAML代码的一部分:

        <Grid.Resources>
            <ObjectDataProvider x:Key="tools"
                                MethodName="GetValues"
                                ObjectType="{x:Type sys:Enum}">
                <ObjectDataProvider.MethodParameters>
                    <x:Type TypeName="local:Tool" />
                </ObjectDataProvider.MethodParameters>
            </ObjectDataProvider>
        </Grid.Resources>
        <ComboBox x:Name="cmbTools"
                  ItemsSource="{Binding Source={StaticResource tools}}"
                  SelectedItem="{Binding Path=ToolType, Mode=TwoWay}" />
    

    您需要为
    组合框提供可用值的列表。例如:

    public BodyTypeFlagsTS4[] AvailableBodyTypeFlags
    {
        get { return (BodyTypeFlagsTS4[])Enum.GetValues(typeof(BodyTypeFlagsTS4)); }
    }
    
    然后将您的
    组合框
    绑定到列表:

    <ComboBox ItemsSource="{Binding AvailableBodyTypeFlags}"
              SelectedItem="{Binding BodyTypeFlags}" />
    
    
    

    实际上,您不需要依赖属性。在视图模型中实现
    INotifyPropertyChanged
    就足够了。

    ItemsSource只能绑定到
    IEnumerable
    类型的属性,不能绑定到enum。第二,为什么需要依赖属性呢?这是一个只有链接的答案。关于StackOverflow的回答应该是独立的和永久的。您应该将代码直接放入答案中,而不是提供一个将在一个月内消失的临时链接。我得到了一个错误:名称“BodyTypeFlagsEnum”在名称空间“clr namespace:S4S”中不存在,但我显然在顶部引用了它:xmlns:local=“clr namespace:S4S”。它也在c#中的名称空间中。有什么想法吗?你已经在问题中命名了enum BodyTypeFlagst4。请检查枚举名称。在XAML中,您将本地引用为xmlns:local=“clr namespace:S4S”如果您的应用程序名称空间声明为
    code
    namespace S4S
    code
    谢谢,我成功了。(这似乎是VS的一个已知错误造成的。)枚举项没有按与我相同的顺序加载到组合框中的原因之一吗?(我把它们按字母顺序排列,但它们不再是了。)还有System.Windows.MessageBox.Show(System.Enum.GetName(typeof(BodyTypeFlagsTS4),this.BodyTypes);空着回来
    public BodyTypeFlagsTS4[] AvailableBodyTypeFlags
    {
        get { return (BodyTypeFlagsTS4[])Enum.GetValues(typeof(BodyTypeFlagsTS4)); }
    }
    
    <ComboBox ItemsSource="{Binding AvailableBodyTypeFlags}"
              SelectedItem="{Binding BodyTypeFlags}" />