2017-02-01 5 views
2

у меня есть выпадающий cmbOptions и кнопка btnShowItemНевозможно получить COMBOBOX выбранного значения элемента по нажатию другой кнопки

и вот код:

private void btnShowItem_click(object sender, RoutedEventArgs e) 
{ 
    string item = ((ComboBoxItem)cmbOptions.SelectedItem).Content.ToString(); //Exception is here 
} 

Ниже исключение:

System.InvalidCastException: "Невозможно наложить объект pe 'System.String' ввести 'System.Windows.Controls.ComboBoxItem'. "

Я уже прошел через несколько ссылок, как это:

Cannot get ComboBox selected item value

ComboBox- SelectionChanged event has old value, not new value

Get selected value from combo box in c# wpf

и т.д., и т.д ..

Но Ждут» t получить решение.

Пожалуйста, обратите внимание, мне нужно получить значение ComboBoxItem на ButtonClick только НЕ на cmbSelectionChange событии

+0

Вы используете привязки или вы добавили пару 'ComboBoxItem' вручную? –

+1

@ManfredRadlwimmer вручную –

ответ

6

При использовании .Content.ToString() всей вещь преобразуются в строку, и вы пытаетесь бросить эту результирующую строку ComboBoxItem такого преобразования является не разрешено, но вы можете наложить SelectedItem на ComboBoxItem, а затем взять значения из них. попробовать что-то вроде этого:

ComboBoxItem currentItem = (ComboBoxItem)cmbOptions.SelectedItem; // this will be the comboBoxItem 
string item =currentItem.Content.ToString(); // gives you the required string 

Если объединить и шаги, которые вы можете написать так:

string item =((ComboBoxItem)cmbOptions.SelectedItem).Content.ToString(); 

Дополнительное примечание:

Тем не менее, вы получаете то же самое исключение означает SelectedItem будет быть строкой, попробуйте получить значение следующим образом: string item = cmbOptions.SelectedItem.ToString(). Это произойдет, потому что вы можете назначить DisplayMemberPath

+1

пробовал, не работает! –

+1

Такое же исключение происходит с помощью вашего кода –

+0

@Tushar: Не могли бы вы заглянуть в обновления. –

0
 for (int x = 0; x < cboType.Items.Count; x++) 
     { 
      cboType.SelectedIndex = x; 
      var typeCombo = ((ComboBox)cboType); 
      var valueType = ((ComboBoxItem)typeCombo.SelectedValue); 

      if (thisProductInfo.Type == valueType.Content.ToString()) 
      { 
       cboType.SelectedIndex = x; 
       break; 
      } 
     } 

     //for (int x = 0; x < cboColor.Items.Count; x++) 
     //{ 
     // cboColor.SelectedIndex = x; 
     // var colorCombo = ((ComboBox)cboColor); 
     // var valueColor = ((ComboBoxItem)colorCombo.SelectedValue); 

     // if (thisProductInfo.Type == valueColor.Content.ToString()) 
     // { 
     //  cboColor.SelectedIndex = x; 
     //  break; 
     // } 
     //} 

как об этом? первое работает, но прокомментированный цикл дает мне ошибку кастинга, попробовал selectedindex, но те же результаты, только первые работы.

+0

Вы должны удалить незаработанный (прокомментированный) блок. Может быть, вы могли бы объяснить разницу между «SelectedValue» и «SelectedItem»? –

+0

nah, im здесь, чтобы найти ответы, я не знаю, почему коды ниже не работают, а коды выше, но они в основном такие же .. очень странно ... –

 Смежные вопросы

  • Нет связанных вопросов^_^