2010-02-27 1 views
6

Cela peut être quelque chose couvert dans C# 101, mais je n'ai pas été en mesure de trouver une réponse facile à comprendre à cette question n'importe où sur google ou débordement de pile. Existe-t-il un meilleur moyen de renvoyer une valeur de texte à partir d'une liste déroulante sans utiliser ce travail de merde autour de je suis venu avec?Comment puis-je obtenir la valeur de texte d'un ComboBox dans WPF?

private void test_site_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    string cmbvalue = ""; 

    cmbvalue = this.test_site.SelectedValue.ToString(); 
    string[] cmbvalues = cmbvalue.Split(new char[] { ' ' }); 

    MessageBox.Show(cmbvalues[1]); 
} 

S'il vous plaît ne pas sur moi pour dur je suis vraiment juste maintenant ramasser C# et OOP.

Répondre

11

Il semble que vous ayez des ComboBoxItems dans votre ComboBox, de sorte que SelectedValue renvoie un ComboBoxItem et que ToString renvoie par conséquent quelque chose comme ComboBox SomeValue.

Si tel est le cas, vous pouvez obtenir le contenu en utilisant ComboBoxItem.Content:

ComboBoxItem selectedItem = (ComboBoxItem)(test_site.SelectedValue); 
string value = (string)(selectedItem.Content); 

Cependant, une meilleure approche est, au lieu de remplissage de la zone de liste déroulante avec une collection de ComboBoxItems, de mettre à ComboBox.ItemsSource la collection désirée de chaînes:

test_site.ItemsSource = new string[] { "Alice", "Bob", "Carol" }; 

Alors SelectedItem obtiendra directement la chaîne sélectionnée.

string selectedItem = (string)(test_site.SelectedItem); 
+0

exception de première suggestion: Impossible de convertir l'objet de type 'System.Windows.Controls.ListBoxItem' en type 'System.Windows.Controls.ComboBoxItem'. – Akers

+1

Deuxième suggestion fonctionne très bien! Merci beaucoup! – Akers

1

sur les événements de charge mis

DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(ComboBox.TextProperty, typeof(ComboBox)); 

dpd.AddValueChanged(cmbChungChi, OnTextChanged); 

et obtenir le texte via funtion

private void OnTextChanged(object sender, EventArgs args) 
{ 
    txtName.Text = cmbChungChi.Text; 
} 

Bonne chance.

Questions connexes