Пара ключ-значение для ComboBox (WPF)

Решение подходит только для 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("Выберите элемент!");
            }
        }
    }
}

Результат работы программы:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.