2015-01-01 7 views
1

У меня есть перечисление вот так.Заполнение комбинированного поля со значениями из перечисления

enum Beep {A, B, C } 

Теперь я хочу, чтобы заполнить мое поле со списком с этими значениями следующим образом (идея следовать other's example).

<ComboBox x:Name="comboBox1" 
      ... 
      ItemsSource="Binding Source={StaticResource Beep}" /> 

Однако связывание становится немного слишком статичны и дает мне буквально точную строку я помещаю. Что я сделал не так и как я могу решить это?

enter image description here

Я также попытался следующий намек я получил, чтобы добавить что-то вроде этого. Однако ничего не получилось.

public List<Beep> Beepies 
{ 
    get 
    { 
    return new List<Beep>{ Beep.A } 
    } 
} 

Что еще можно сделать по этому поводу? Я могу получить значения в поле, если я привяжусь к коду, указанному ниже. Но это не главное - я хочу XAMLize подход.

comboBox1.ItemsSource = Enum.GetValues(typeof(Beep)); 
+0

@Rainer Пожалуйста, обратите внимание более внимательно читайте содержание обоих вопросов, а не просто весело отмечайте, как видите, что есть что-то связанный. Вопросы принципиально разные. Они просто используют один и тот же набор ключевых слов, потому что они из той же области. –

+0

Пожалуйста, учтите, что ваш вопрос направил меня в данном направлении. Поскольку вы можете предположить, что мой флаг не плохой, он подходит к выводу, что ваш вопрос может быть неправильно истолкован. К вашей проблеме: может быть, что вы просто делаете привязку данных неправильно? Вместо '' вы, вероятно, должны использовать ''? – Rainer

+0

вам не хватает '{'. use ItemsSource = "{Binding Source = {StaticResource Beep}}" –

ответ

0

Вы должны связываться, используя коллекцию. Попробуйте создать List<Beep>.

ИЛИ

Создать конвертер, который перечисляет enum:

public class EnumConverter : IValueConverter 
{ 
    public object Convert(object value, ...) 
    { 
    return Enum.GetValues(value.GetType()); 
    } 
} 

Вы можете использовать этот конвертер в связывании с XAMLise подход:

<!-- Put this in resources somewhere --> 
<Converters:EnumConverter x:Key="MyEnumConverter"/> 

<!-- Change your binding to include the new converter --> 
<ComboBox x:Name="comboBox1" 
      ... 
      ItemsSource="Binding Source={StaticResource Beep}, 
         Converter={StaticResource MyEnumConverter}" /> 
+0

Я сделал дополнение к вопросу. Предложения по этому поводу? –

+0

Я добавил еще один подход, используя конвертер. Это будет многократно использоваться для любого 'enum' – Laith

+0

Кажется, что это не сработало (получили некоторые ошибки, когда имена не были доступны. Однако, когда я использовал: * ItemsSource =" {x: Static local: MainWindow.AllBeeps} "*, кажется работать.Можете ли вы подтвердить, что это просто другой синтаксис того, что вы предлагаете, пожалуйста? Я не уверен, что делает * x *. И я хотел бы знать, можно ли уменьшить * локальный: ClassName.PropName *, используя некоторую ссылку выше в коде XAML. –

Смежные вопросы