Привязка ComboBox к перечислению, что я делал неправильно?

Я в той же лодке, в которой я делаю это следующим образом:

  1. Создать новый репо
  2. Клонировать существующий репо на мой компьютер
  3. Оформить заказ во всех филиалах
  4. Добавить новое репо в качестве удаленного к моему локальному репо
  5. Выдать репо на новый удаленный
  6. Пройти и очистить репо

Да, это больно, но я делаю это так, как я работаю над проектом.

Другой вариант заключался бы в том, чтобы раскошелиться на репо, но я не нашел способа сервировать ссылку на форк.

14
задан H.B. 10 August 2016 в 17:17
поделиться

2 ответа

Чтобы получить доступ к вложенному типу, вы должны использовать разделитель «+»:

<ObjectDataProvider MethodName="GetValues"
                    ObjectType="{x:Type sys:Enum}"
                    x:Key="ContactExportTypes">
    <ObjectDataProvider.MethodParameters>
        <x:Type TypeName="local:Enums+ContactExportType" />
    </ObjectDataProvider.MethodParameters>

</ObjectDataProvider>

Кстати, есть более простой способ привязки к значениям перечисления без использования ObjectDataProvider . Он основан на настраиваемом расширении разметки:

<ComboBox ItemsSource="{local:EnumValues local:Enums+ContactExportType}"/>

Вот код для расширения разметки EnumValues:

[MarkupExtensionReturnType(typeof(object[]))]
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)
    {
        if (this.EnumType == null)
            throw new ArgumentException("The enum type is not set");
        return Enum.GetValues(this.EnumType);
    }
}
37
ответ дан 1 December 2019 в 07:13
поделиться
<ObjectDataProvider MethodName="GetValues"
                    ObjectType="{x:Type local:Enums}"
                    x:Key="ContactExportTypes">

должно быть

<ObjectDataProvider MethodName="GetValues"
                    ObjectType="{x:Type sys:Enum}"
                    x:Key="ContactExportTypes">

, а

<x:Type TypeName="local:ContactExportType" /> 

должно быть

<x:Type TypeName="CEM.Marketing.Objects.ContactExportType"/>

sys: Enum указывает на класс фреймворка Enum имя типа в параметре указывает на ваше полное имя типа.

проверьте блог Беа Штольниц

    <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="odp">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="namespace.class.TShirtSizes"/>
            </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>

<ComboBox ItemsSource="{Binding Source={StaticResource odp}}" IsSynchronizedWithCurrentItem="true"/>
1
ответ дан 1 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: