Решение подходит только для WPF (не MVVM). Вариант для WinForms
Далеко не всегда реализация MVVM продуктивна. И, если вам не хочется превращать свой Code behind во ViewModel, в мелкой программе, то, думаю, вам стоит ознакомиться с материалом.
Итак, мы имеем список
id | value ---------- 1 | Soni 3 | Sonsung 5 | LC
Который должен отображать для пользователя value
и отдавать программе id
при выборе. Для начала создаем коллекцию:
using System.Collections.Generic; /************** etc *****************/ Dictionary<int, string> comboBoxSource = new Dictionary<int, string>(3) { { 1, "Soni" }, { 3, "Sonsung" }, { 5, "LC" } };
Далее «прикручиваем» коллекцию к нашему ComboBox и настраиваем отображение:
ComboBox.ItemsSource = comboBoxSource; ComboBox.SelectedValuePath = "Key";//Элемент коллекции, который выбирается ComboBox.DisplayMemberPath = "Value";//Элемент для отображения
Выбранный ключ вернётся в ComboBox.SelectedValue
. Чтобы закрепить материал, давайте напишем простенькое WPF-приложение показывающее ключ выбранного элемента.
MainWindow.xaml:
<Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Title="MainWindow" Height="131.373" Width="242.647" Loaded="Window_Loaded"> <Grid> <ComboBox x:Name="сomboBox" HorizontalAlignment="Left" Margin="21,23,0,0" VerticalAlignment="Top" Width="195"/> <Button Content="Button" HorizontalAlignment="Left" Margin="21,60,0,0" VerticalAlignment="Top" Width="195" Click="Button_Click"/> </Grid> </Window>
MainWindow.xaml.cs:
using System.Collections.Generic; using System.Windows; namespace WpfApp1 { /// <summary> /// Логика взаимодействия для MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } //При загрузке окна private void Window_Loaded(object sender, RoutedEventArgs e) { //1. Создаем коллекцию и заполняем её значениями Dictionary<int, string> comboBoxSource = new Dictionary<int, string>(3) { {1, "Soni"}, {3, "Sonsung"}, {5, "LC"} }; //2. Заполняем СomboBox сomboBox.ItemsSource = comboBoxSource; сomboBox.SelectedValuePath = "Key";//Элемент коллекции, который выбирается сomboBox.DisplayMemberPath = "Value";//Элемент для отображения } private void Button_Click(object sender, RoutedEventArgs e) { try { //Запоминаем выбранный ID int selectedId = (int)сomboBox.SelectedValue; //Выводим результат на экран MessageBox.Show("Вы выбрали " + selectedId, "Проверка"); } catch { MessageBox.Show("Выберите элемент!"); } } } }
Результат работы программы: