2010-02-17 3 views
11

Ich suche nach einer Möglichkeit, mehrere Elemente in der Listenansicht auszuwählen und sie bei einer bestimmten Aktion zu löschen. Was ich nicht herausfinden kann, ist, wie sollte ich diese mehreren Artikel ausgewählt haben? Ich würde denken, dass es eine Liste gibt, zu der ich sie alle hinzufügen müsste, aber was ist der beste Weg, um diese Situation anzugehen, haben Sie irgendwelche Ideen? Danke! -KevinWPF ListView Auswählen mehrerer Listenansichtelemente

Antwort

21

Set SelectionMode-Multiple oder Extended und iterieren in Ihrem ListView die SelectedItems durch.

+1

Beachten Sie, dass 'SelectionMode.Multiple' nicht die Möglichkeit enthält, Umschalt + Klick zu verwenden, um aufeinanderfolgende Elemente auszuwählen, oder Strg + A, um alle auszuwählen.Scheint wie ein Bug/Aufsicht. – Livven

+0

Defekte Verbindung - SelectedItems. –

+0

Behoben! Vielen Dank!! – Arcturus

4

Sie eine der folgenden Aktionen durchführen ...

ListView.SelectionMode = SelectionMode.Extended in Code-behind oder

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

Sie haben auch 'multiple' selection noch könnte man eher gehen für ' erweitert ', wodurch der Benutzer mehrere Elemente nur mit dem Shift-Modifikator auswählen kann.

Für die Elemente ausgewählt Löschen Sie die ListView.SelectedItems Propery verwenden könnte wie folgt

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

[oder Sie könnten die SelectedIndices Eigenschaft]

hoffen, dass dies das Problem vermeiden Sie gestoßen :)

Prost!

8

würde ich vorschlagen, verwenden Sie nicht die SelectedItems Eigenschaft ListView, stattdessen bindet die Selected Eigenschaft der einzelnen ListViewItem, zu einer entsprechenden ViewModel Klasse. Danach müssen Sie nur noch alle Objekte ViewModel finden, die die Eigenschaft Selected TRUE gebunden haben, sie aus der Modellauflistung entfernen (wenn Sie sie entfernen) und die Benutzeroberfläche aktualisieren. Wenn die Sammlung ObservableCollection ist, wird die Benutzeroberfläche automatisch aktualisiert. Viel Glück.

+2

Können Sie bitte angeben, warum Sie die Eigenschaft 'SelectedItems' nicht verwenden sollten? –

+1

weil es das Design komplizierter macht und zu Fehlern führen kann. Wenn Sie eine Selected-Eigenschaft für jedes Objekt in der ItemsSource haben, können Sie jedes Element ganz einfach wie folgt binden:

+0

@NomanKhan Sollte ListViewItem nicht sein ListBoxItem; auch keine Notwendigkeit für BasedOn denke ich ... Aber guter Kommentar, hat mir geholfen! –

0

Erhalten Erfolg auch WPF Listview von

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

Arcturus Antwort schreiben ist gut, wenn Sie nicht MVVM verwenden. Aber wenn Sie dies tun und Ihre ItemsSource an eine ObservableCollection von Objekten in Ihrem ViewModel gebunden ist, würde ich Tigrans Antwort mit Noman Khan-Klärung empfehlen.

Dies ist, wie es aussehen würde:

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

In Ansicht Modell Sie bezwecken würden: public ObservableCollection<SomeItem> SomeListViewList{ get; set; }

SomeItem Klasse würde ein Ausgewähltes Objekt:

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

    public string SomeItemNum { get; set; } 

    public bool SomeItemSelected { get; set; } 
} 

Dann könnten Sie Iteriere/laufe über die Liste und erhalte die ausgewählten:

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