代码之家  ›  专栏  ›  技术社区  ›  Maciek

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

  •  2
  • Maciek  · 技术社区  · 15 年前

    在命名空间中 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 . 我很想把它(双向)数据绑定到 MYEnum “容器”字段。用户控件位于窗口中。

    我该如何实现?我看过一些例子 ObjectDataProvider ,但是我迷路了。

    1 回复  |  直到 13 年前
        1
  •  5
  •   Thomas Levesque    15 年前

    您可以定义 ItemsSource ComboBox 通过使用返回枚举的所有值的自定义标记扩展(这将获得与使用 ObjectDataProvider ,但使用起来更简单):

    [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);
        }
    }
    

    并将selecteditem绑定到myenum属性:

    <ComboBox ItemsSource="{local:EnumValues local:MyEnum}" SelectedItem="{Binding MYEnum, Mode=TwoWay}" />
    

    (the local XML命名空间必须映射到C命名空间)