2008-09-03 25 views
5

Sé que en ASP.NET que puedo obtener un elemento de un DropDownList utilizandoelemento en ComboBox WPF

DropDownList1.Items.FindByText 

¿Hay un 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.

¿Tiene esto sentido?

+0

ComboBox es solo una Vista para sus datos ... No creo que sea una buena idea hacer el desarrollo orientado a la IU en tal caso. Debe realizar una búsqueda en la fuente de datos o la colección de elementos en lugar del control de la interfaz de usuario en sí. De lo contrario, puede que se quede con una implementación específica de la interfaz de usuario que es difícil de mantener y admitir en el futuro. –

Respuesta

9

¿Se puede usar ItemContainerGenerator?

ItemContainerGenerator contiene un método ContainerFromItem que toma un parámetro de objeto.Si usted tiene una referencia al objeto completo que su ComboBox (o una manera de reconstruirla), puede utilizar el siguiente:

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

Hehe me lo ganaste :) – Arcturus

2

En WPF puede 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

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

de código subyacente encontrar el artículo por su contenido puede utilizar UI automation.

1

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

en otras palabras, establecer el DataContext del ComboBox (o su padre) a la 'Record' seleccionado y obligar a la SelectedItem en el ComboBox a una propiedad expuesta en el 'record' ..

puede ayudar si puede proporcionar algunos fragmentos de código o detalles adicionales para que las respuestas puedan ser 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.

0

Usted puede recuperar los elementos cuadro combinado de dos maneras:

por Artículo :

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

por el índice:

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

¿Puede dar algún contexto en cuanto a qué es exactamente lo que está tr ying a hacer?

¿Qué objetos pone en su 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 confunde 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 de 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.

Cuestiones relacionadas