2010-09-15 8 views
20

Mi WPF ComboBox contiene solo entradas de texto. El usuario seleccionará uno. ¿Cuál es la forma más sencilla de obtener el texto del ComboBoxItem seleccionado? Responda tanto en C# como en Visual Basic. Aquí está mi ComboBox:¿Cuál es la forma más sencilla de obtener el texto seleccionado en un cuadro combinado que contiene solo entradas de texto?

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

Por cierto, sé la respuesta, pero no fue fácil de encontrar. Pensé en publicar la pregunta para ayudar a otros. REVISIÓN: He aprendido una mejor respuesta. Al agregar SelectedValuePath = "Content" como un atributo ComboBox, ya no necesito el feo código de conversión. Vea la respuesta de Andy a continuación.

+1

Si conoce la respuesta, siéntase libre de publicarla también y marcarla como la respuesta aceptada. No es necesario que otros hagan la misma investigación dos veces. ;-) Y quién sabe, tal vez alguien pueda encontrar una mejor solución en función de su trabajo ... – Heinzi

+0

Agregando a ese comentario, podría haber marcado fácilmente su pregunta como wiki de la comunidad. –

Respuesta

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

En código:

stringValue = cboPickOne.SelectedValue.ToString() 
+6

Por mucho que me gustaría que fuera así de simple, eso por sí solo no funciona. SelectedValue devuelve un ComboBoxItem, no el valor de cadena que estoy buscando. Colocar ToString después de SelectedValue devuelve este System.Windows.Controls.ComboBoxItem: seguido por el texto seleccionado. – DeveloperDan

+3

OK. Veo que ha agregado SelectedValuePath = "Contenido" como un atributo al ComboBox. ¡Eso funciona! No se requiere un lanzamiento feo. Es agradable, limpio y simple, justo lo que quería. Gracias Andy! – DeveloperDan

+0

También puede enlazar a SelectedValue.Content como ruta, esto desacopla el comportamiento de ComboBox del requisito del objetivo de enlace. – Sprague

0

Si ya conoce el contenido de su ComboBoxItem sólo va a ser cadenas, simplemente acceder al contenido como cadena:

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

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

Como nos sabemos que el contenido es una cadena, me Prefiere un lanzamiento sobre una llamada de método ToString().

7

sólo para aclarar Heinzi y respuestas de Jim Brissom aquí es el código en Visual Basic :

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

y C#:

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

Gracias!

+1

Depende de si especifica los elementos explícitamente como ComboBoxItems o mediante enlaces directamente como cadenas. En el último caso, '.Content' arrojaría una excepción, creo. –

-1

utilizar la propiedad DataRowView.Row.Item[Index] o ItemArray[Index] para obtener el SelectedItem, donde el índice es el índice de la columna en la DataTable utilizado como itemSource para el cuadro combinado. En tu caso será 0.En lugar de índice también puede pasar el nombre de columna también:

VB:

Dim sItem As String=DirectCast(cboPickOne.SelectedItem, DataRowView).Row.Item(1).ToString() 

C#

String sItem=((DataRowView)cboPickOne.SelectedItem).Row.Item[1].ToString(); 

Para obtener el SelectedValue puede utilizar:

VB:

Dim sValue As String=cboPickOne.SelectedValue.ToString() 

C#

String sValue=cboPickOne.SelectedValue.ToString(); 
+0

La pregunta no dice que los elementos en el 'ComboBox' son del tipo' DataRowView'. –

1

Si agrega elementos en ComboBox como

youComboBox.Items.Add("Data"); 

A continuación, utilice la siguiente:

youComboBox.SelectedItem; 

Pero si se agregan elementos de enlace de datos, utilice la siguiente:

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

El uso de cboPickOne.Text debería dar usted la cadena.

2

Acabo de hacer esto.

string SelectedItem = MyComboBox.Text; 
Cuestiones relacionadas