2016-06-26 5 views
1

Я видел много ресурсов на этом и результатах или на все изменения в подходе и сложности. Например:Связывание комбо с локализованным enum свойством

Binding SelectedValue of ComboBox to enum in WPF

Is it possible to databind to a Enum, and show user-friendly values?

У меня есть 3 комплекта перечислений:

public enum StudentGender 
{ 
    [XmlEnum(Name ="M")] 
    Male, 
    [XmlEnum(Name = "F")] 
    Female 
} 

public enum StudentAppointed 
{ 
    [XmlEnum(Name = "E")] 
    Elder, 
    [XmlEnum(Name = "MS")] 
    MinisterialServant, 
    [XmlEnum(Name = "X")] 
    NotAppointed 
} 

public enum StudentServing 
{ 
    [XmlEnum(Name = "R")] 
    RegularPioneer, 
    [XmlEnum(Name = "P")] 
    Publisher, 
    [XmlEnum(Name = "U")] 
    UnbaptisedPublisher, 
    [XmlEnum(Name = "S")] 
    Studying 
} 

Я реализую всплывающее окно, которое имеет некоторые поля со списком на нем. Он использует связывание:

Popup Window

Ниже приведен пример связывания для одного из 3 полей со списком:

<StackPanel Grid.Row="2" Grid.Column="0" Margin="2" Background="WhiteSmoke"> 
    <Label>Serving As:</Label> 
    <ComboBox x:Name="comboServingAs" SelectedItem="{Binding Serving}" SelectedIndex="2"> 
     <ComboBoxItem>Studying</ComboBoxItem> 
     <ComboBoxItem>Unbaptized Publisher</ComboBoxItem> 
     <ComboBoxItem>Publisher</ComboBoxItem> 
     <ComboBoxItem>Regular Pioneer</ComboBoxItem> 
    </ComboBox> 
</StackPanel> 

В приведенном выше случае, Обслуживание является следующее свойство:

[XmlAttribute(AttributeName ="Publisher")] 
public StudentServing Serving { get; set; } 

Как уже упоминалось, я видел предыдущие идеи, которые различаются по сложности. Но, если возможно, я стараюсь избегать трижды применять одно и то же. Могу ли я иметь одно решение, которое может быть применено для всех из них?

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

Это становится сложнее для гендерного комбо, потому что я использую Brother/Sister там по причинам.

Я видел около [DescriptionAttribute], о котором говорится в приведенных выше ответах. Мне просто приходит в голову, что мои перечисления действительно суть целые числа. Итак, почему я не могу каким-либо образом направить на/из правого перечисления на основе выбранного значения индекса?

Надеюсь, мой вопрос не слишком запутан.

+0

«Почему я не могу каким-либо образом нанести на/из правого перечисления на основе выбранного значения индекса?» Я бы догадался, что ответ на этот вопрос: вы не пробовали. Что мешает вам написать три ValueConverters, которые отображают индекс в значение enum и связывают с ComboBox 'SelectedIndex' вместо' SelectedItem', используя эти ValueConverters? –

+0

@ MarkusHütter Я был тем, что его обескуражило обработать с помощью индекса. Я нашел другой способ согласно моему ответу. Благодарю. –

ответ

1

Я нашел отличную статью here, которая помогла мне!

Я добавил обработчики событий, как описано в приведенном выше учебном пособии, и тогда смог справиться со всем!

Сортировка.

+0

учебник в порядке, он просто не использует обработчики событий ... –

+0

@ MarkusHütter Могу ли я спросить, как использование обработчика событий может сделать его проще? Я заинтересован. У вас есть соответствующая ссылка? Благодарю. –

+0

это не так. Мне было интересно то же самое, потому что ты сказал, что использовал их ... –

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