Pregunta

Sé que en ASP.NET puedo obtener un elemento de DropDownList usando

DropDownList1.Items.FindByText

¿Existe algún método similar que pueda usar en WPF para un ComboBox?

Este es el escenario.

Tengo una tabla llamada RestrictionFormat que contiene una columna llamada RestrictionType, el tipo es una clave externa a una tabla que almacena estos valores.

En mi aplicación de edición que estoy escribiendo, cuando el usuario selecciona RestrictionFormat de un ComboBox (esto funciona bien), obtengo los detalles para editarlos.Estoy usando un segundo ComboBox para asegurarme de que el usuario solo seleccione un tipo de restricción al editar.Ya tengo la segunda propiedad vinculada del cuadro combinado de la tabla RestrictionType, pero necesito cambiar el índice seleccionado para que coincida con el valor especificado en el registro.


Este es el escenario.

Tengo una tabla llamada RestrictionFormat que contiene una columna llamada RestrictionType, el tipo es una clave externa a una tabla que almacena estos valores.

En mi aplicación de edición que estoy escribiendo, cuando el usuario selecciona RestrictionFormat de un ComboBox (esto funciona bien), obtengo los detalles para editarlos.Estoy usando un segundo ComboBox para asegurarme de que el usuario solo seleccione un tipo de restricción al editar.Ya tengo la segunda propiedad vinculada del cuadro combinado de la tabla RestrictionType, pero necesito cambiar el índice seleccionado para que coincida con el valor especificado en el registro.

¿Esto tiene sentido?

¿Fue útil?

Solución

¿Puedes utilizar ItemContainerGenerator?

ItemContainerGenerator contiene un método ContainerFromItem que toma un parámetro de objeto.Si tiene una referencia al objeto completo que contiene su comboBox (o una forma de reconstruirlo), puede usar lo siguiente:

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

Otros consejos

En WPF puedes usar el método FindName.

XAML:

    <ComboBox Name="combo">
        <ComboBoxItem Name="item1" >1</ComboBoxItem>
        <ComboBoxItem Name="item2">2</ComboBoxItem>
        <ComboBoxItem Name="item3">3</ComboBoxItem>
    </ComboBox>

Archivo de código subyacente

   item1.Content = "New content"; // Reference combo box item by name
   ComboBoxItem item = (ComboBoxItem)this.combo.FindName("item1"); // Using FindName method

Para buscar un elemento por su contenido, puede utilizar Automatización de la interfaz de usuario.

en lugar de intentar vincular SelectedIndex, ¿por qué no vincula SelectedItem en ComboBox al valor en el registro?

en otras palabras, establezca el DataContext del ComboBox (o su padre) en el 'registro' seleccionado y vincule el SelectedItem en el ComboBox a una propiedad expuesta en el 'registro'.

Puede resultar útil proporcionar algunos fragmentos de código o detalles adicionales para que las respuestas puedan ser más específicas y hacer referencia a las variables y tipos que está utilizando tanto en el registro fuente como en el cuadro combinado que ha completado.

Puede recuperar elementos del cuadro combinado de dos maneras:

Por artículo:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);

Por índice:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

¿Puedes darnos algún contexto sobre qué estás intentando hacer exactamente?

¿Qué objetos pones en tu Combobox y usando qué método?(¿Está configurando o vinculando la propiedad ElementSsource?) ¿Por qué necesita buscar un elemento por su "texto"?El uso más habitual en WPF es vincular la propiedad SelectedItem a otra cosa para que pueda recuperar/configurar la entrada seleccionada usando su representación.¿Existe algún requisito específico para el cual necesite encontrar un elemento específico en la lista?

En el peor de los casos, puede realizar la búsqueda en la colección a la que vincula su ComboBox usando Linq To Objects.

No confunda ComboBoxItem (es decir, el elemento generado detrás de escena por WPF cuando vincula ItemsSource) con SelectedItem, que es el objeto real en la colección a la que vincula.Esa suele ser la fuente de la mayoría de los problemas con WPF cuando no estás acostumbrado.Hay muy pocos casos en los que necesita encontrar el ComboBoxItem real.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top