web-dev-qa-db-fra.com

Quelle est la façon la plus simple d'obtenir le texte sélectionné dans une zone de liste déroulante contenant uniquement des entrées de texte?

Mon WPF ComboBox ne contient que des entrées de texte. L'utilisateur en sélectionnera un. Quelle est la façon la plus simple d'obtenir le texte du ComboBoxItem sélectionné? Veuillez répondre en C # et en Visual Basic. Voici ma ComboBox:

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

Au fait, je connais la réponse mais ce n'était pas facile à trouver. J'ai pensé publier la question pour aider les autres. RÉVISION: J'ai appris une meilleure réponse. En ajoutant SelectedValuePath = "Content" en tant qu'attribut ComboBox, je n'ai plus besoin du code de casting laid. Voir la réponse d'Andy ci-dessous.

29
DeveloperDan
<ComboBox 
  Name="cboPickOne"
  SelectedValuePath="Content"
  >
  <ComboBoxItem>This</ComboBoxItem>
  <ComboBoxItem>should be</ComboBoxItem>
  <ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>

Dans du code:

   stringValue = cboPickOne.SelectedValue.ToString()
55
Andy

Juste pour clarifier les réponses de Heinzi et Jim Brissom, voici le code Visual Basic:

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

et C #:

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

Merci!

10
DeveloperDan

Si vous ajoutez des éléments dans ComboBox en tant que

youComboBox.Items.Add("Data"); 

Ensuite, utilisez ceci:

youComboBox.SelectedItem; 

Mais si vous ajoutez des éléments par liaison de données, utilisez ceci:

DataRowView vrow = (DataRowView)youComboBox.SelectedItem;
DataRow row = vrow.Row;
MessageBox.Show(row[1].ToString());
2
Mahmoud

Si vous savez déjà que le contenu de votre ComboBoxItem ne sera que des chaînes, accédez simplement au contenu en tant que chaîne:

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

Je viens de faire ça.

string SelectedItem = MyComboBox.Text;
2
Konstantin Nikolov

En utilisant cboPickOne.Text devrait vous donner la chaîne.

1
Loreno
var s = (string)((ComboBoxItem)cboPickOne.SelectedItem).Content;

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

Puisque nous savons que le contenu est une chaîne, je préfère un cast plutôt qu'un appel de méthode ToString().

0
Heinzi