2009-05-06 6 views
14

En WPF, j'aimerais définir les indices sélectionnés d'un System.Windows.Controls.ListBoxProgrammatically sélectionner les objets/index dans un ListBox

Je meilleure façon que je l'ai trouvé à ce jour est de supprimer tous les éléments du contrôle, insérez le sélectionné, appelez SelectAll(), puis insérez le reste, mais cette solution ne fonctionne ni dans ma situation ni très efficace. Donc, comment définir les éléments dans une liste à sélectionner, par programmation?

Répondre

9

Une façon de procéder consiste à ajouter un champ Selected à votre objet de données. Vous devez ensuite remplacer le style listboxitem par défaut et lier la propriété isselected à la propriété Selected de votre objet. Il vous suffit ensuite de parcourir vos éléments de données et de mettre à jour la valeur sélectionnée. Si vous n'implémentez pas cette propriété Selected en tant que propriété de dépendance, vous devez implémenter l'interface INotifyPropertyChanged dans votre classe et déclencher l'événement propertychanged lorsque vous définissez la valeur.

+0

Cela a fonctionné parfaitement, merci beaucoup! – Alex

+0

Merci! ... Cela a bien fonctionné. Je vais juste ajouter un segment de code que j'ai utilisé ci-dessous. –

+0

en fait c'est trop compliqué par rapport à danlash est ci-dessous. – henon

2

Vous devez faire ceci:

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

Où itemIndex serait l'élément que vous souhaitez sélectionner. Si vous souhaitez sélectionner plusieurs éléments, vous devez utiliser la propriété ListBox.SelectedIndexCollection.

+1

System.Windows.Controls.ListBox n'est pas comme System.Windows.Forms.ListBox en continuant une propriété SelectedIndexCollection – Alex

+0

Mon mauvais. Désolé pour ça. – jgallant

+0

SelectedItem fonctionnera toujours. –

26

Vous pouvez définir plusieurs éléments sélectionnés à l'aide de la collection SelectedItems. Ce n'est pas par index, mais par ce que vous avez lié:

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

Cela déclenchera l'événement SelectionChanged une fois pour chaque élément ajouté. Lorsque vous sélectionnez manuellement un groupe d'éléments avec un décalage, il n'est levé qu'une seule fois pour l'ensemble du groupe. – FreddyFlares

2

comment sélectionner plusieurs éléments dans programme dans WPF ListBox

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

merci, ça bouge! – henon

+5

Avez-vous réellement coupé et collé ceci à partir de danlash sur ce fil. – Epirocks

1

Merci à mdm20. Mon cas était en fait la vérification d'un CheckBox au sein du ListBox, et cette propriété de dépendance a fonctionné comme un charme. je devais hériter ma classe personnalisée à partir DependencyObject et mettre en œuvre la propriété

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

Vous pouvez le faire pour plusieurs sections:

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

Où i est l'indice de l'élément.

Questions connexes