usuario controles control .net wpf search user-controls

.net - usuario - controles wpf c#



Buscar artículo en WPF ComboBox (5)

Sé que en ASP.NET puedo obtener un artículo de DropDownList usando

DropDownList1.Items.FindByText

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

Aquí está 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 editor que estoy escribiendo, cuando el usuario selecciona el RestrictionFormat de un ComboBox (esto funciona bien), estoy sacando los detalles para su edición. 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 enlazada del cuadro combinado de la tabla RestrictionType, pero necesito cambiar el índice seleccionado para que coincida con el valor especificado en el registro.

Aquí está 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 editor que estoy escribiendo, cuando el usuario selecciona el RestrictionFormat de un ComboBox (esto funciona bien), estoy sacando los detalles para su edición. 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 enlazada 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?


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 encontrar un elemento por su contenido, puede usar la automatización de la interfaz de usuario .


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

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

puede ser útil si puede proporcionar algunos fragmentos de código o detalles adicionales para que las respuestas sean más específicas y se refieran a las variables y tipos que está utilizando tanto en el registro de origen como en el ComboBox que ha rellenado.


¿Puedes darnos un contexto sobre qué estás tratando de hacer exactamente?

¿Qué objetos colocas en tu Combobox y con qué método? (¿Está configurando o vinculando la propiedad ItemsSource?) ¿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 / establecer la entrada seleccionada utilizando su representación. ¿Hay algún requisito específico para el que 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 utilizando Linq To Objects.

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


¿Puedes usar 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);


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);