WPF:将组合框绑定到类对象的枚举属性?

时间:2009-12-16 12:33:54

标签: c# wpf data-binding combobox

在命名空间X中,我有一个公共枚举定义:

namespace X
{
    public enum MyEnum
    { val0=0, val1, val2, val3, val4 }
}

在命名空间Y中,我有一个具有X.MyEnum类型属性的类

using namespace X;
namespace Y
{
    class Container
    {
        public MyEnum MYEnum
        { get { return m_myenum; } set { m_myenum = value; } }

        private MyEnum m_myenum;
    }
}

我创建了一个包含ComboBox的用户控件。我非常希望将它(TwoWay)数据绑定到“容器”的MYEnum字段。 usercontrol驻留在窗口中。

我如何实现这一目标?我见过ObjectDataProvider的一些例子,但是我迷路了。

1 个答案:

答案 0 :(得分:6)

您可以使用自定义标记扩展来定义ItemsSource的{​​{1}},该扩展会返回枚举的所有值(这与使用ComboBox的结果相同,但它是更简单使用):

ObjectDataProvider

将SelectedItem绑定到MYEnum属性:

[MarkupExtensionReturnType(typeof(Array))]
public class EnumValuesExtension : MarkupExtension
{
    public EnumValuesExtension()
    {
    }

    public EnumValuesExtension(Type enumType)
    {
        this.EnumType = enumType;
    }

    [ConstructorArgument("enumType")]
    public Type EnumType { get; set; }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Enum.GetValues(EnumType);
    }
}

<ComboBox ItemsSource="{local:EnumValues local:MyEnum}" SelectedItem="{Binding MYEnum, Mode=TwoWay}" /> XML名称空间必须映射到您的C#名称空间)