Получить выбранное значение из поля со списком в C # WPF - PullRequest
57 голосов
/ 04 декабря 2010

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

ComboBox.SelectedValue.toString();

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

Как мне это сделать в WPF?У этого, кажется, нет возможности.

Ответы [ 20 ]

79 голосов
/ 07 июня 2012

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

String s = comboBox1.Text;

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

72 голосов
/ 04 декабря 2010

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

ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
string value = typeItem.Content.ToString();
10 голосов
/ 04 декабря 2014

Мой 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();
10 голосов
/ 04 декабря 2010

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

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

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

MessageBox.Show(comboBox.SelectedItem.ToString());
6 голосов
/ 14 мая 2015

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

string yourstringname = (yourComboBox.SelectedItem as ComboBoxItem).Content.ToString();
6 голосов
/ 04 декабря 2010

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

MyObject mo = myListBox.SelectedItem as MyObject;
return mo.Name;
3 голосов
/ 10 ноября 2015

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

private void ComboBoxName_SelectionChanged(object send ...
{
    string s = ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
}
3 голосов
/ 21 октября 2012

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

<ComboBox SelectedValuePath="_Department"
          DisplayMemberPath="_Department"
          Height="23"
          HorizontalAlignment="Left"
          ItemsSource="{Binding}"
          Margin="-58,1,0,5"
          Name="_DepartmentComboBox"
          VerticalAlignment="Center"
          Width="268"/>
2 голосов
/ 07 ноября 2016

Это во многом зависит от того, как заполняется коробка.Если это делается путем присоединения 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();
}

Я видел здесь еще 2 ответа, в которых были разные части - у одного был 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;
}

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

2 голосов
/ 03 августа 2013

Создайте событие 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...