Каков самый простой способ получить выделенный текст в поле со списком, содержащее только текстовые записи?
Мой WPF ComboBox содержит только текстовые записи. Пользователь выберет один. Каков самый простой способ получить текст выбранного ComboBoxItem?. Ответьте как на С#, так и на Visual Basic. Вот мой ComboBox:
<ComboBox Name="cboPickOne">
<ComboBoxItem>This</ComboBoxItem>
<ComboBoxItem>should be</ComboBoxItem>
<ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>
Кстати, я знаю ответ, но найти его было нелегко. Я думал, что отправлю вопрос, чтобы помочь другим. ПЕРЕСМОТР: Я узнал лучший ответ. Добавляя SelectedValuePath = "Content" в качестве атрибута ComboBox, мне больше не нужен уродливый код. См. Ответ Энди ниже.
Ответы
Ответ 1
<ComboBox
Name="cboPickOne"
SelectedValuePath="Content"
>
<ComboBoxItem>This</ComboBoxItem>
<ComboBoxItem>should be</ComboBoxItem>
<ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>
В коде:
stringValue = cboPickOne.SelectedValue.ToString()
Ответ 2
Только для разъяснения Хайнци и Джима Бриссома ответы здесь - это код в
Visual Basic:
Dim text As String = DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content.ToString()
и С#:
string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();
Спасибо!
Ответ 3
Я просто сделал это.
string SelectedItem = MyComboBox.Text;
Ответ 4
Если вы добавляете элементы в ComboBox как
youComboBox.Items.Add("Data");
Затем используйте это:
youComboBox.SelectedItem;
Но если вы добавляете элементы привязки данных, используйте это:
DataRowView vrow = (DataRowView)youComboBox.SelectedItem;
DataRow row = vrow.Row;
MessageBox.Show(row[1].ToString());
Ответ 5
Использование cboPickOne.Text
должно дать вам строку.
Ответ 6
Если вы уже знаете, что содержимое вашего ComboBoxItem будет только строкой, просто получите доступ к содержимому в виде строки:
string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();
Ответ 7
var s = (string)((ComboBoxItem)cboPickOne.SelectedItem).Content;
Dim s = DirectCast(DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content, String)
Поскольку мы знаем, что содержимое является строкой, я предпочитаю использовать метод вызова ToString()
.
Ответ 8
Используйте свойство DataRowView.Row.Item[Index]
или ItemArray[Index]
, чтобы получить SelectedItem
, где Index является индексом столбца в DataTable
, используемом как itemSource
для combobox. В вашем случае это будет 0. Вместо индекса вы также можете передать имя столбца:
VB:
Dim sItem As String=DirectCast(cboPickOne.SelectedItem, DataRowView).Row.Item(1).ToString()
С#
String sItem=((DataRowView)cboPickOne.SelectedItem).Row.Item[1].ToString();
Чтобы получить SelectedValue, вы можете использовать:
VB:
Dim sValue As String=cboPickOne.SelectedValue.ToString()
С#
String sValue=cboPickOne.SelectedValue.ToString();