Какой самый простой способ получить выделенный текст в поле со списком, содержащим только текстовые записи? - PullRequest
29 голосов
/ 16 сентября 2010

Мой WPF ComboBox содержит только текстовые записи. Пользователь выберет один. Какой самый простой способ получить текст выбранного ComboBoxItem? Пожалуйста, ответьте как на C #, так и на Visual Basic. Вот мой ComboBox:

<ComboBox Name="cboPickOne">
    <ComboBoxItem>This</ComboBoxItem>
    <ComboBoxItem>should be</ComboBoxItem>
    <ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>

Кстати, я знаю ответ, но найти его было нелегко. Я думал, что отправлю вопрос, чтобы помочь другим. ПЕРЕСМОТР: Я узнал лучший ответ. Добавив SelectedValuePath = "Content" в качестве атрибута ComboBox, мне больше не нужен уродливый код приведения. Смотрите ответ Энди ниже.

Ответы [ 8 ]

54 голосов
/ 16 сентября 2010
<ComboBox 
  Name="cboPickOne"
  SelectedValuePath="Content"
  >
  <ComboBoxItem>This</ComboBoxItem>
  <ComboBoxItem>should be</ComboBoxItem>
  <ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>

В коде:

   stringValue = cboPickOne.SelectedValue.ToString()
10 голосов
/ 16 сентября 2010

Просто чтобы уточнить ответы Хайнци и Джима Бриссома, вот код Visual Basic :

Dim text As String = DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content.ToString()

и C # :

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();

Спасибо!

2 голосов
/ 25 сентября 2016

Я только что сделал это.

string SelectedItem = MyComboBox.Text;
2 голосов
/ 25 августа 2016

Если вы добавляете элементы в ComboBox как

youComboBox.Items.Add("Data"); 

Тогда используйте это:

youComboBox.SelectedItem; 

Но если вы добавляете элементы с помощью привязки данных, используйте это:

DataRowView vrow = (DataRowView)youComboBox.SelectedItem;
DataRow row = vrow.Row;
MessageBox.Show(row[1].ToString());
2 голосов
/ 16 сентября 2010

Если вы уже знаете, что содержимое вашего ComboBoxItem будет только строкой, просто получите доступ к содержимому в виде строки:

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();
1 голос
/ 30 августа 2016

Использование cboPickOne.Text должно дать вам строку.

0 голосов
/ 11 апреля 2013

Используйте свойство DataRowView.Row.Item[Index] или ItemArray[Index], чтобы получить SelectedItem, где Index - это индекс столбца в DataTable, который используется как itemSource для выпадающего списка.В вашем случае это будет 0. Вместо индекса вы также можете передать имя столбца:

VB:

Dim sItem As String=DirectCast(cboPickOne.SelectedItem, DataRowView).Row.Item(1).ToString()

C #

String sItem=((DataRowView)cboPickOne.SelectedItem).Row.Item[1].ToString();

Чтобы получитьВыбранное значение, которое вы можете использовать:

VB:

Dim sValue As String=cboPickOne.SelectedValue.ToString()

C #

String sValue=cboPickOne.SelectedValue.ToString();
0 голосов
/ 16 сентября 2010
var s = (string)((ComboBoxItem)cboPickOne.SelectedItem).Content;

Dim s = DirectCast(DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content, String)

Поскольку мы знаем , что содержимое является строкой, я предпочитаю приведение вместо ToString() вызова метода.

...