Подтвердить что ты не робот

Получить выбранное значение из поля со списком в С# WPF

Я только начал использовать формы WPF вместо форм Windows Forms. В форме Windows Forms я мог бы просто сделать:

ComboBox.SelectedValue.toString();

И это будет нормально работать.

Как мне сделать это в WPF? Похоже, что нет возможности.

4b9b3361

Ответ 1

Я понял немного странный способ сделать это по сравнению со старыми формами WF:

ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
string value = typeItem.Content.ToString();

Ответ 2

Хорошо.. Я нашел более простое решение.

String s = comboBox1.Text;

Таким образом, я получаю выбранное значение как строку.

Ответ 3

Убедитесь, что вы указали имя своего ComboBox в файле XAML:

<ComboBox Height="23" Name="comboBox" />

В вашем коде вы можете получить доступ к выбранному элементу, используя свойство SelectedItem:

MessageBox.Show(comboBox.SelectedItem.ToString());

Ответ 4

Мой XAML выглядит следующим образом:

<ComboBox Grid.Row="2" Grid.Column="1" Height="25" Width="200" SelectedIndex="0" Name="cmbDeviceDefinitionId">
    <ComboBoxItem Content="United States" Name="US"></ComboBoxItem>
    <ComboBoxItem Content="European Union" Name="EU"></ComboBoxItem>
    <ComboBoxItem Content="Asia Pacific" Name="AP"></ComboBoxItem>
</ComboBox>

Содержимое отображается в виде текста и названия поля со списком WPF. Чтобы получить название выбранного элемента, я должен следовать этой строке кода:

ComboBoxItem ComboItem = (ComboBoxItem)cmbDeviceDefinitionId.SelectedItem;
string name = ComboItem.Name;

Чтобы получить выделенный текст в выпадающем списке WPF:

string name = cmbDeviceDefinitionId.SelectionBoxItem.ToString();

Ответ 5

Это зависит от того, что вы связали с вашим ComboBox. Если вы связали объект с именем MyObject и имеете, допустим, свойство Name, сделайте следующее:

MyObject mo = myListBox.SelectedItem as MyObject;
return mo.Name;

Ответ 6

Как насчет этих:

string yourstringname = (yourComboBox.SelectedItem as ComboBoxItem).Content.ToString();

Ответ 7

Решить эту проблему просто. Все, что я сделал, это добавил "SelectedValuePath" в мой код XAML и привязал его к свойству модели, которое я хочу вернуть с помощью комбинированного списка.

<ComboBox SelectedValuePath="_Department"
          DisplayMemberPath="_Department"
          Height="23"
          HorizontalAlignment="Left"
          ItemsSource="{Binding}"
          Margin="-58,1,0,5"
          Name="_DepartmentComboBox"
          VerticalAlignment="Center"
          Width="268"/>

Ответ 8

Как вариант в обработчике событий ComboBox SelectionChanged:

private void ComboBoxName_SelectionChanged(object send ...
{
    string s = ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
}

Ответ 9

Создайте событие ComboBox SelectionChanged и задайте ItemsSource = "{Binding}" в проекте WPF:

Код:

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string ob = ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();
    MessageBox.Show(ob);
}

Ответ 10

Это во многом зависит от того, как заполняется ящик. Если это делается путем присоединения DataTable (или другой коллекции) к ItemsSource, вы можете найти прикрепление обработчика событий SelectionChanged к вашему ящику в XAML, а затем использовать его в полезном коде:

private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cbx = (ComboBox)sender;
    string s = ((DataRowView)cbx.Items.GetItemAt(cbx.SelectedIndex)).Row.ItemArray[0].ToString();
}

Я видел еще два ответа, которые имели разные части: у одного был ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();, который выглядит похожим, но не бросает ящик в DataRowView, что-то, что я нашел, мне нужно было сделать, а другое: ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();, используется .SelectedItem вместо .Items.GetItemAt(comboBox1.SelectedIndex). Это могло бы сработать, но то, на чем я остановился, было на самом деле комбинацией двух, которые я написал выше, и не помню, почему я избегал .SelectedItem, за исключением того, что он не должен работать для меня в этом сценарии.

Если вы заполняете поле динамически или ComboBoxItem элементы в выпадающем меню непосредственно в XAML, это код, который я использую:

private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cbx = (ComboBox)sender;
    string val = String.Empty;
    if (cbx.SelectedValue == null)
        val = cbx.SelectionBoxItem.ToString();
    else
        val = cboParser(cbx.SelectedValue.ToString());
}

Вы увидите, что у меня есть cboParser. Это связано с тем, что вывод из SelectedValue выглядит так: System.Windows.Controls.Control: Some Value. По крайней мере, это было в моем проекте. Итак, вы должны проанализировать свой Some Value из этого:

private static string cboParser(string controlString)
{
    if (controlString.Contains(':'))
    {
        controlString = controlString.Split(':')[1].TrimStart(' ');
    }
    return controlString;
}

Но вот почему на этой странице так много ответов. Это во многом зависит от того, как вы заполняете окно, о том, как вы можете вернуть стоимость. Ответ может быть правильным в одном случае, а в другом - неправильным.

Ответ 11

У меня была аналогичная проблема и я попробовал ряд решений, предложенных в этом потоке, но обнаружил, что событие SelectionChanged запускалось до того, как элемент ComboBox действительно обновился, чтобы показать новый выбор (т.е. он всегда указывал содержимое выпадающего списка ранее к происходящему изменению).

Чтобы преодолеть это, я обнаружил, что лучше использовать параметр e, который автоматически передается обработчику событий, а не пытаться загрузить значение непосредственно из поля со списком.

XAML:

<Window.Resources>
    <x:Array x:Key="Combo" Type="sys:String">
        <sys:String>Item 1</sys:String>
        <sys:String>Item 2</sys:String>
    </x:Array>
</Window.Resources>
<Grid>
    <ComboBox Name="myCombo" ItemsSource="{StaticResource Combo}" SelectionChanged="ComboBox_SelectionChanged" />
    <TextBlock Name="MyTextBlock"></TextBlock>
</Grid>

С#:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string chosenValue = e.AddedItems[0].ToString();
}

Ответ 12

private void usuarioBox_TextChanged(object sender, EventArgs e)
{
    string textComboBox = usuarioBox.Text;
}

Ответ 13

Это тот же принцип.

Вы можете использовать SelectedIndex и ComboBox.Items [SelectedIndex].ToString(). Или просто ComboBox.SelectedItem и приведите его к любому типу вам нужно :)

Ответ 14

MsgBox(cmbCut.SelectedValue().ToString())

Ответ 15

Чтобы получить значение выбранного индекса ComboBox в С#:

Combobox.SelectedValue

Ответ 16

На самом деле вы можете сделать это следующим образом.

Предположим, ваше имя ComboBox comboBoxA. Тогда его значение может быть получено как:

string combo = comboBoxA.SelectedValue.ToString();

Я думаю, что теперь это поддерживается, поскольку вашему вопросу пять лет.

Ответ 17

Напишите это так:

String CmbTitle = (cmb.SelectedItem as ComboBoxItem).Content.ToString()

Ответ 18

если вы хотите получить значение и проверить его, вы можете сделать что-то вроде этого

string index = ComboBoxDB.Text;
        if (index.Equals(""))
        {                
            MessageBox.Show("your message");
        }
        else
        {
            openFileDialog1.ShowDialog();
            string file = openFileDialog1.FileName;
            reader = new StreamReader(File.OpenRead(file));
        }

Ответ 19

Я использую этот код, и он работает для меня:

DataRowView typeItem = (DataRowView)myComboBox.SelectedItem; 
string value = typeItem.Row[0].ToString();

Ответ 20

XAML:

<ComboBox Height="23" HorizontalAlignment="Left" Margin="19,123,0,0" Name="comboBox1" VerticalAlignment="Top" Width="33" ItemsSource="{Binding}" AllowDrop="True" AlternationCount="1">
    <ComboBoxItem Content="1" Name="ComboBoxItem1" />
    <ComboBoxItem Content="2" Name="ComboBoxItem2" />
    <ComboBoxItem Content="3" Name="ComboBoxItem3" />
</ComboBox>

С#:

if (ComboBoxItem1.IsSelected)
{
    // Your code
}
else if (ComboBoxItem2.IsSelected)
{
    // Your code
}
else if(ComboBoxItem3.IsSelected)
{
    // Your code
}

Ответ 21

Это работает для меня:

System.Data.DataRowView typeItem = (System.Data.DataRowView)ComboBoxName.SelectedItem;
string value = typeItem.DataView.ToTable("a").Rows[0][0].ToString();