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
Set SelectionMode-Multiple
oder Extended
und iterieren in Ihrem ListView
die SelectedItems
durch.
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!
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.
Können Sie bitte angeben, warum Sie die Eigenschaft 'SelectedItems' nicht verwenden sollten? –
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: –
@NomanKhan Sollte ListViewItem nicht sein ListBoxItem; auch keine Notwendigkeit für BasedOn denke ich ... Aber guter Kommentar, hat mir geholfen! –
Erhalten Erfolg auch WPF Listview von
while (lvJournalDetails.SelectedItems.Count > 0)
{
lvJournalDetails.Items.Remove(lvJournalDetails.SelectedItem);
}
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
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
Defekte Verbindung - SelectedItems. –
Behoben! Vielen Dank!! – Arcturus