В качестве примера возьмем следующий код:
public enum ExampleEnum { FooBar, BarFoo }
public class ExampleClass : INotifyPropertyChanged
{
private ExampleEnum example;
public ExampleEnum ExampleProperty
{ get { return example; } { /* set and notify */; } }
}
Я хочу привязать свойство свойства ExampleProperty к ComboBox, чтобы он показывал опции "FooBar" и "BarFoo" и работал в режиме TwoWay. Оптимально я хочу, чтобы мое определение ComboBox выглядело примерно так:
<ComboBox ItemsSource="What goes here?" SelectedItem="{Binding Path=ExampleProperty}" />
В настоящее время у меня есть обработчики для событий ComboBox.SelectionChanged и ExampleClass.PropertyChanged, установленных в моем окне, где я вручную привязываю.
Есть ли какой-нибудь канонический способ? Вы обычно используете Преобразователи и как бы вы заполнили ComboBox правильными значениями? Я даже не хочу начинать с i18n прямо сейчас.
Edit
Итак, был задан один вопрос: как заполнить ComboBox правильными значениями.
Получить значения Enum в виде списка строк с помощью ObjectDataProvider из статического метода Enum.GetValues:
<Window.Resources>
<ObjectDataProvider MethodName="GetValues"
ObjectType="{x:Type sys:Enum}"
x:Key="ExampleEnumValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="ExampleEnum" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
Это я могу использовать как ItemSource для моего ComboBox:
<ComboBox ItemsSource="{Binding Source={StaticResource ExampleEnumValues}}"/>