2010-02-27 20 views
6

Esto puede ser algo cubierto en C# 101, pero no he podido encontrar una respuesta fácil de entender para esta pregunta en cualquier parte de google o desbordamiento de pila. ¿Hay alguna forma mejor de devolver un valor de texto de un cuadro combinado sin utilizar este trabajo horrible que se me ocurrió?¿Cómo obtengo el valor de texto de un ComboBox en 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]); 
} 

Por favor, no me critiquen demasiado ahora estoy recogiendo C# y OOP.

Respuesta

11

Parece que tiene ComboBoxItems en su ComboBox, por lo que SelectedValue está devolviendo un ComboBoxItem y ToString por lo tanto devuelve algo así como ComboBox SomeValue.

Si ese es el caso, se puede obtener el contenido usando ComboBoxItem.Content:

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

Sin embargo, un mejor enfoque es, en vez de poblar el cuadro combinado con una colección de ComboBoxItems, para establecer a ComboBox.ItemsSource la colección deseada de cadenas:

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

Luego, SelectedItem le mostrará directamente la cadena seleccionada actualmente.

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

primera sugerencia a través de la excepción: no se puede convertir el objeto del tipo 'System.Windows.Controls.ListBoxItem' para escribir 'System.Windows.Controls.ComboBoxItem'. – Akers

+1

¡La segunda sugerencia funciona genial! ¡Gracias un montón! – Akers

1

En eventos de carga puso

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

dpd.AddValueChanged(cmbChungChi, OnTextChanged); 

y obtener el texto a través de funtion

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

Buena suerte.

Cuestiones relacionadas