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.
<ComboBox
Name="cboPickOne"
SelectedValuePath="Content"
>
<ComboBoxItem>This</ComboBoxItem>
<ComboBoxItem>should be</ComboBoxItem>
<ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>
Dans du code:
stringValue = cboPickOne.SelectedValue.ToString()
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!
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());
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();
Je viens de faire ça.
string SelectedItem = MyComboBox.Text;
En utilisant cboPickOne.Text
devrait vous donner la chaîne.
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()
.