Добавление текста и значения в ComboBox в WPF

У меня есть следующий код WinForm по этой ссылке: http://net-informations.com/q/faq/combovalue.html

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim comboSource As New Dictionary(Of String, String)()
    comboSource.Add("1", "Sunday")
    comboSource.Add("2", "Monday")
    comboSource.Add("3", "Tuesday")
    comboSource.Add("4", "Wednesday")
    comboSource.Add("5", "Thursday")
    comboSource.Add("6", "Friday")
    comboSource.Add("7", "Saturday")
    ComboBox1.DataSource = New BindingSource(comboSource, Nothing)
    ComboBox1.DisplayMember = "Value"
    ComboBox1.ValueMember = "Key"
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim key As String = DirectCast(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Key
    Dim value As String = DirectCast(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Value
    MessageBox.Show(key & "   " & value)
End Sub
End Class

Я попытался преобразовать приведенные выше коды WinForm в коды WPF, как показано ниже.

xaml

<Window x:Class = "MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "525">
<StackPanel>
    <Button x:Name = "Button1" Height = "25" Width = "100" Content = "Click Me"/>
    <ComboBox x:Name = "ComboBox1" Height = "25" Width = "200"/>
</StackPanel>
</Window>

код позади

Class MainWindow
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    Dim comboSource As New Dictionary(Of String, String)()
    comboSource.Add("1", "Sunday")
    comboSource.Add("2", "Monday")
    comboSource.Add("3", "Tuesday")
    comboSource.Add("4", "Wednesday")
    comboSource.Add("5", "Thursday")
    comboSource.Add("6", "Friday")
    comboSource.Add("7", "Saturday")
    ComboBox1.DataSource = New BindingSource(comboSource, Nothing)
    ComboBox1.DisplayMember = "Value"
    ComboBox1.ValueMember = "Key"
End Sub
Private Sub Button1_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click
    Dim key As String = DirectCast(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Key
    Dim value As String = DirectCast(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Value
    MessageBox.Show(key & "   " & value)
End Sub
End Class

Но я сталкиваюсь с некоторыми ошибками, как вы можете видеть на этом рисунке: https://prnt.sc/na5iie

Итак, как я могу решить эти ошибки?

Возможно, контрольный список этого вопроса (которое написано пользователем с самой высокой репутацией) может помочь вам написать лучшие вопросы.

Hille 15.04.2019 16:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
342
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В WPF мы задаем исходный список элементов ComboBox с помощью ItemsSource, а не DataSource, и это работает немного по-другому.

Каждый предмет может быть любым объектом, который вы хотите использовать, имея в виду, что сам объект является вашим ValueMember. В вашем случае использование словаря по умолчанию даст вид «[1, воскресенье]» для каждого элемента, потому что элемент будет иметь тип KeyValuePair(Of String, String).

Чтобы оформить его так, как вам хотелось бы, проще всего использовать шаблоны XAML, например такие:

<ComboBox ItemsSource = "{Binding comboSource}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Label Content = "{Binding Value}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Тогда SelectedItem ComboBox будет KeyValuePair, поэтому просто используйте его Key, когда вам нужно использовать выбранный элемент в другом месте, как предполагалось.

Другие вопросы по теме