WPF: привязка поля со списком к свойству enum объекта класса? - PullRequest
3 голосов
/ 16 декабря 2009

В пространстве имен X у меня есть общедоступное определение enum:

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 контейнера. Пользовательский контроль находится в окне.

Как мне этого достичь? Я видел несколько примеров с ObjectDataProvider, однако я потерян.

1 Ответ

6 голосов
/ 16 декабря 2009

Вы можете определить 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}" />

(пространство имен local XML должно быть сопоставлено с пространством имен C #)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...