2010-02-17 5 views
11

Je suis en train de trouver un moyen de sélectionner plusieurs éléments dans la vue liste et de les supprimer sur une certaine action. Ce que je n'arrive pas à comprendre, c'est comment dois-je sélectionner ces éléments multiples? Je pense qu'il y a une liste à laquelle je devrais ajouter tous, mais quelle est la meilleure façon d'aborder cette situation, avez-vous des idées? Merci! -KevinWPF ListView Sélection de plusieurs éléments d'affichage de liste

Répondre

21

Set SelectionMode-Multiple ou Extended et itérer l'SelectedItems dans votre ListView.

+1

À noter que 'SelectionMode.Multiple' n'inclut pas la possibilité d'utiliser Shift + Click pour sélectionner des éléments consécutifs ou Ctrl + A pour tout sélectionner.On dirait un bug/oubli. – Livven

+0

Lien rompu - SelectedItems. –

+0

Fixe! Merci!! – Arcturus

4

Vous pouvez faire une des options suivantes ...

ListView.SelectionMode = SelectionMode.Extended dans le code-behind ou

<ListView SelectionMode="Extended"></ListView> en XAML

vous avez également 'multiple' selectionMode mais vous pouvez aller plutôt pour ' étendu 'qui permet à l'utilisateur de sélectionner plusieurs éléments uniquement en utilisant le modificateur de décalage.

Pour supprimer les éléments sélectionnés, vous pouvez utiliser le ListView.SelectedItems Propery comme suit

while(myListView.SelectedItems.Count > 0) 
{ 
    myListView.Items.Remove(list.SelectedItems[0]); 
} 

[ou vous pouvez utiliser la propriété selectedIndices]

Hope cela évitera le problème que vous rencontrez :)

À la votre!

8

Je suggère de ne pas utiliser la propriété SelectedItems de ListView, lier plutôt la propriété Selected du seul ListViewItem, à une classe ViewModel correspondante. Après cela, la seule chose que vous devez faire est de trouver tous les objets ViewModel qui ont lié la propriété Selected TRUE, les retirer de la collection de modèles (si vous supprimez) et rafraîchir l'interface utilisateur. Si la collection est ObservableCollection, l'interface utilisateur sera actualisée automatiquement. Bonne chance.

+2

Pourriez-vous fournir des raisons pour lesquelles vous ne devriez pas utiliser la propriété 'SelectedItems'? –

+1

car cela rend le design plus compliqué et peut conduire à des bugs. Si vous avez une propriété sélectionnée sur chaque objet qui est dans le ItemsSource vous pouvez lier chaque élément très facilement comme ceci:

+0

@NomanKhan Devrait être ListViewItem non ListBoxItem; aussi pas besoin de BasedOn je pense ... Mais bon commentaire, m'a aidé! –

0

obtenir le succès aussi WPF ListView en écrivant

while (lvJournalDetails.SelectedItems.Count > 0) 
{ 
    lvJournalDetails.Items.Remove(lvJournalDetails.SelectedItem); 
} 
1

Arcturus réponse est bonne si vous ne l'utilisez MVVM. Mais si vous le faites et que votre ItemsSource est lié à une collection ObservableCollection d'objets dans votre ViewModel, je recommanderais Tigran answer, avec la clarification de Noman Khan.

Voici comment cela ressemblerait à ceci:

<ListView ItemsSource="{Binding SomeListViewList}"> 
    <ListView.Resources> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="IsSelected" Value="{Binding SomeItemSelected, Mode=TwoWay}" /> 
     </Style> 
    </ListView.Resources> 
    ... 
</ListView> 

Dans la vue modèle que vous auriez objet: public ObservableCollection<SomeItem> SomeListViewList{ get; set; }

SomeItem classe comprendrait une propriété sélectionnée:

public class SomeItem 
{ 
    public string SomeItemName { get; set; } 

    public string SomeItemNum { get; set; } 

    public bool SomeItemSelected { get; set; } 
} 

Ensuite, vous pouvez parcourir/parcourir la liste et obtenir ceux qui sont sélectionnés:

foreach (var item in SomeListViewList) 
    if (item.SomeItemSelected) 
     // do something 
Questions connexes