2009-05-06 17 views
14

En WPF, me gustaría establecer los índices seleccionados de un System.Windows.Controls.ListBoxselección de programación elementos/Índices en un cuadro de lista

que mejor manera que he encontrado hasta ahora es eliminar toda la elementos del control, inserte el seleccionado, llame a SelectAll(), luego inserte el resto, pero esta solución no funciona en mi situación ni es muy eficiente.

Entonces, ¿cómo se configuran los elementos en un Listbox para ser seleccionados, programáticamente?

Respuesta

9

Una forma de hacerlo es agregar un campo Seleccionado a su objeto de datos. Luego debe reemplazar el estilo predeterminado de listboxitem y enlazar la propiedad isselected a la propiedad Selected en su objeto. Luego solo necesita revisar sus datos y actualizar el valor Seleccionado.

Si no implementa esa propiedad Seleccionada como una propiedad de dependencia, necesita que su clase implemente la interfaz INotifyPropertyChanged y suba el evento de propiedad modificada cuando establezca el valor.

+0

Esto funcionó perfectamente, ¡muchas gracias! – Alex

+0

¡Gracias! ... Esto funcionó bien. Añadiré un segmento de código que utilicé a continuación. –

+0

en realidad esto es muy complicado en comparación con el siguiente Danlash. – henon

2

que tiene que hacer esto:

ListBoxObject.SelectedItem = ListBoxObject.Items.GetItemAt(itemIndex); 

Dónde itemIndex sería el elemento que desea seleccionar. Si desea seleccionar varios elementos, necesita usar la propiedad ListBox.SelectedIndexCollection.

+1

System.Windows.Controls.ListBox no es como System.Windows.Forms.ListBox al continuar una propiedad SelectedIndexCollection – Alex

+0

My bad. Lo siento por eso. – jgallant

+0

SelectedItem seguirá funcionando. –

26

Puede establecer varios elementos seleccionados mediante la colección SelectedItems. Esto no es por el índice, sino por lo que ha obligado:

foreach (var boundObject in objectsBoundToListBox) 
{ 
    ListBox.SelectedItems.Add(boundObject); 
} 
+1

Esto aumentará el evento SelectionChanged una vez por cada elemento agregado. Cuando selecciona un grupo de elementos manualmente con shift, solo se levanta una vez para todo el grupo. – FreddyFlares

2

cómo seleccionar mediante programación varios elementos de cuadro de lista en WPF

foreach (var boundObject in objectsBoundToListBox) 
{ 
    ListBox.SelectedItems.Add(boundObject); 
} 
+0

gracias, esto rocas! – henon

+5

¿Realmente cortó y pegó esto de danlash en este hilo. – Epirocks

1

Gracias a mdm20. Mi caso estaba realmente comprobando CheckBox dentro del ListBox, y esta propiedad de dependencia funcionaba como un amuleto. que tenía que heredar mi clase personalizada de DependencyObject e implementar la propiedad

public class ProjectListItem : DependencyObject{ 

    public Boolean IsChecked 
    { 
     get { return (Boolean)this.GetValue(CheckedProperty); } 
     set { this.SetValue(CheckedProperty, value); } 
    } 
    public static readonly DependencyProperty CheckedProperty = 
     DependencyProperty.Register("IsChecked", typeof(Boolean), typeof(ProjectListItem), 
            new PropertyMetadata(false)); 
} 
1

Puede hacer esto por varias secciones:

ListBoxObject.SelectedItems.Add(ListBoxObject.Items.GetItemAt(i)); 

donde i es el índice de elemento.

Cuestiones relacionadas