Вам нужно сделать три вещи:
- Свяжите ItemsSource ComboBox со списком опций.
- Свяжите SelectedItem со свойством, которое содержит выбор.
- Установите для ComboBox.ItemTemplate значение DataTemplate для ComboBoxItem.
Так, например, если вашим объектом контекста данных является человек, имеющий адреса электронной почты, и вы хотите выбрать его основной, у вас могут быть классы с этими сигнатурами:
public class EmailAddress
{
public string AddressAsString { get; set; }
}
public class Person
{
public IEnumerable<EmailAddress> EmailAddresses { get; }
public EmailAddress MainEmailAddress { get; set; }
}
Тогда вы можете создать поле со списком следующим образом:
<ComboBox ItemsSource="{Binding EmailAddresses}" SelectedItem="{Binding MainEmailAddress}">
<ComboBox.ItemTemplate>
<DataTemplate>
<ComboBoxItem Content="{Binding AddressAsString}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Теперь вам нужно реализовать INotifyPropertyChanged в Person и EmailAddress. Для коллекции EmailAddresses вы можете поддержать ее с помощью ObjservableCollection.
Или в качестве альтернативы вы можете использовать Update Controls .NET . Это проект с открытым исходным кодом, который заменяет привязку данных и не требует INotifyPropertyChanged. Вы можете использовать любую коллекцию, имеющую смысл для поддержки свойства EmailAddresses. XAML работает так же, как и выше, за исключением того, что вы импортируете пространство имен UpdateControls.XAML и замените {Binding ...} на {u: Update ...}.