2009-05-06 10 views
14

In WPF, mi piacerebbe impostare gli indici selezionati di uno System.Windows.Controls.ListBoxselezionando programmazione Voci/Indici in un ListBox

ho modo migliore che ho trovato finora è quello di rimuovere tutte le elementi dal controllo, inserire il selezionato, chiamare SelectAll(), quindi inserire il resto, ma questa soluzione non funziona nella mia situazione né è molto efficiente.

Quindi, come impostare gli elementi in una casella di riepilogo per essere selezionati, a livello di programmazione?

risposta

9

Un modo per farlo è aggiungere un campo Selezionato al proprio oggetto dati. Quindi devi sostituire lo stile listboxitem predefinito e associare la proprietà isselected alla proprietà Selected nel tuo oggetto. Quindi devi solo passare attraverso i tuoi dati e aggiornare il valore selezionato.

Se non si implementa la proprietà Selected come proprietà di dipendenza, è necessario che la classe abbia implementato l'interfaccia INotifyPropertyChanged e generato l'evento propertychanged quando si imposta il valore.

+0

Questo ha funzionato perfettamente, grazie mille! – Alex

+0

Grazie! ... Questo ha funzionato bene. Aggiungerò solo un segmento di codice che ho usato sotto. –

+0

in realtà questo è complicato rispetto a danlash di seguito. – henon

2

quello che dovete fare questo:

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

Dove itemIndex sarebbe l'elemento che si desidera selezionare. Se si desidera selezionare più elementi, è necessario utilizzare la proprietà ListBox.SelectedIndexCollection.

+1

System.Windows.Controls.ListBox non è come System.Windows.Forms.ListBox in contining una proprietà SelectedIndexCollection – Alex

+0

Il mio male. Mi dispiace per quello – jgallant

+0

SelectedItem continuerà a funzionare. –

26

È possibile impostare più elementi come selezionati utilizzando la raccolta SelectedItems. Questo non è un indice, ma da quello che avete legato:

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

Questo solleverà l'evento SelectionChanged una volta per ogni elemento aggiunto. Quando selezioni manualmente un gruppo di elementi con lo spostamento, viene sollevato una sola volta per l'intero gruppo. – FreddyFlares

2

come selezionare a livello di codice più elementi in listbox in WPF

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

grazie, questo rocce! – henon

+5

Lo hai effettivamente tagliato e incollato da danlash su questo thread. – Epirocks

1

Grazie a mdm20. Il mio caso stava effettivamente controllando uno CheckBox all'interno dello ListBox e questa proprietà dipendenze funzionava come un incantesimo. Ho dovuto ereditare la mia classe personalizzata da DependencyObject e implementare la proprietà

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

Si può fare questo per più sezioni:

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

dove i è l'indice della voce.

Problemi correlati