Problem mit .CollectionChanged-Event

  • VB.NET
  • .NET (FX) 4.5–4.8

    Problem mit .CollectionChanged-Event

    Hallo Community,

    ich hab ein kleines Problem, und zwar:

    Ich habe eine ObservableCollection AngewendeteEffekte

    Und dann das Event abonniert:

    AddHandler AngewendeteEffekte.CollectionChanged, AddressOf InitilaisiereVSTEffekte

    ... in dieser Sub:

    VB.NET-Quellcode

    1. Private Sub InitilaisiereVSTEffekte(sender As Object, e As NotifyCollectionChangedEventArgs)
    2. If e.OldItems IsNot Nothing Then
    3. Dim AlteItems As New List(Of ViewModel.PlugInsViewModel)
    4. AlteItems = e.OldItems.Cast(Of ViewModel.PlugInsViewModel).ToList()
    5. For Each item In AlteItems
    6. BassVst.BASS_VST_ChannelRemoveDSP(sourcechannel, item.Handle)
    7. Next
    8. End If
    9. For i = AngewendeteEffekte.Count - 1 To 0 Step -1
    10. AngewendeteEffekte(i).Handle = BassVst.BASS_VST_ChannelSetDSP(sourcechannel, AngewendeteEffekte(i).Pfad, 0, AngewendeteEffekte.Count - i)
    11. Next
    12. End Sub


    Mein Ziel ist es, mit BassVst.BASS_VST_ChannelRemoveDSP alle Effekte, die vor dem Aufrufen der Sub Bestandteil der ObservableCollection waren, zu "removen".

    Und dann komplett alle, die nach der Änderung vorhanden sind, nochmal mit BassVst.BASS_VST_ChannelSetDSP zu initialisieren.

    Aber da scheine ich einen Denkfehler drin zu haben, bzw. interpretiere da die MS Docs falsch. Da heisst es:

    OldItems: The list of items affected by a Replace, Remove, or Move action.
    NewItems: The list of new items involved in the change.

    Wobei mir grad auffällt, klar: .OldItems gibt nicht alle "alten" zurück, sondern nur die "betroffenen".

    Aber wie komm ich dann nach dem Aufruf von .CollectionChanged an die Items dran, die davor in der OC waren? Würdet ihr da eine Kopie von AngewendeteEffekte anlegen, die erst verändert wird, wenn InitialisiereVSTEffekte() durchlaufen ist und dann bei erneutem Aufruf dann diese durchiteriere mit BassVst.BASS_VST_ChannelRemoveDSP?

    Edit: Hat sich erledigt, so hat es geklappt. Wenn jemand aber noch einen besseren Vorschlag hat, gerne posten.

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