Liste mit Indexes der selektierten Items einer Listbox erhalten

  • WPF

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Liste mit Indexes der selektierten Items einer Listbox erhalten

    Guten Tach,

    ich habe eine Listbox an eine List(Of ClassMP3Datei) gebunden.

    Nun möchte ich, dass die selektierten Items "auf Knopfdruck" in eine andere List(Of ClassMP3Datei) geschrieben werden.

    Habe bisher unter WinForms einfach die selektierten Items per Listbox.SelectedIndices ausgelesen und diese dann in die zweite List(Of Class) geschrieben. Eigentlich ganz elegant. Nur gibt es in der WPF weder ListBox.SelectedIndices noch irgendwas wie z.B. Listbox.Items.Item(i).IsSelected...

    Microsoft Docs hab ich durchrecherchiert, aber nix gefunden was ich zum Laufen gebracht hab. Z.B. mit ListBox.SelectedObjectCollection

    Was wäre denn in diesem Fall eine elegante Lösung?
    Ne so wie ich das versteh gibt das ja nur die Items an sich zurück, und nicht die Indexes... Ich hab ja in der Liste keine Strings drin sondern eine Klasseneigenschaft via Display Member Path...

    Edit: Oder kann Selected Items auch andere Sachen als Strings zurückgeben? Muss ich mal ausprobieren...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()

    Das ist zwar jetzt ziemlich Spekulatius bzgl. WPF, aber allein bei WinForms kann SelectedItem alles mögliche sein, abhängig davon, was man reinsteckt. Wenn man die ListBox an eine List(Of WasAuchImmer) bindet, ist SelectedItem eben eine WasAuchImmer-Instanz.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo

    Um hier Licht ins dunkel zu bringen. Die original Listbox von MS hat zwar die Eigenschaft SelectedItems, diese ist aber kein DependencyProperty und kann deshalb nicht gebunden werden.

    Wenn man Binding nutzen möchte, z.b. mittels MVVM muss die ViewModel Klasse wie von @kafffee schon richtig vermutet eine IsSelected-Eigenschaft oder ähnliches aufweisen auf welche gebunden werden kann.
    Dies bringt aber dann auch wieder viele Vorteile mit auf die ich jetzt mal nicht eingehe.

    Beispiel:

    Die Klasse erhält eine Eigenschaft ​IsSelected und diene Listbox einen Style:

    XML-Quellcode

    1. <Style TargetType="{x:Type ListBoxItem}">
    2. <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
    3. </Style>

    Nun wird diese Eigenschaft automatisch Syncronisiert und du kannst in deinem ViewModel mit Dim selektierte = MeineListe.Where(Function(x) x.IsSelected).ToList()​ alle ausgewählten Objekte holen.
    Und zwar wirklich als Objekte und nicht irgendwelche IDs oder sonstwas. Jaja, Objektorientierte Programmierung.

    Aber auch hier wiedermal - klappt nur wenn man mit Binding arbeitet ;)

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##