WPF OnPropertyChanged und ObservableCollection.Remove
-
Hallo
Folgendes: Habe eine Combobox an der ich eine ObservableCollection (Components) gebunden habe.
Ebenfalls habe ich an das SelectedItem eine Property (ActiveComponent) gebunden.Wenn ich nun einen Wert in der Combobox auswähle wird PropertyChanged aufgerufen für ActiveComponent.
Nun würde ich gerne beim Wechsel den zuvor selektierten Wert löschen.
Dazu rufe ich in OnPropertyChanged Components.Remove(_lastComponent).
Das Problem: Components.Remove() löst erneut PropertyChanged von ActiveComponent aus. Was ich nicht verstehe.
Wenn ich den aktiven Wert lösche ist es klar wieso dieser Aufruf erfolgt. Aber bei OnPropertyChanged hat ActiveComponent schon den neuen Wert und sollte doch problemlos den zuvor selektierten Wert löschen können.
-
Verwende doch ein anderes Ergenis wie
SelectionChanged
.Oder Überprüfe, ob beim zweiten OnpropertyChanged der neue Wert
null
(also der alte Wert gelöscht wurde) ist und beeende die Methode dann vorzeitig.
-
Um das gehts doch gar nicht.
Wenn ich Remove aufrufe wird mein ActiveComponent Property erneut geändert. Da hilft es auch nichts es in einer anderen Methode aufzurufen oder die Methode vorzeitig abzubrechen.
Beispiel:
Einträge in der Liste
---
Wert 1
Wert 2
Wert 3
Wert 4
Wert 5
----> kein Proble, wenn:
"Wert 4" ist selektiert. Ich wechsle zu "Wert 1" und lösche in ActiveComponentChanged dabei "Wert 5".
Hier habe ich kein Problem. Das löschen Remove() ändert ActiveComponent nicht.-> Problem wenn:
"Wert 4" ist selektiert. Ich wechsle zu "Wert 1" und lösche in ActiceComponentChanged dabei "Wert 4".ActiveComponent ist bereits "Wert 1". Remove löscht nun "Wert 4" und ActiveComponent wird nun auf "Wert 3" geändert.
Wäre ja logisch wenn Wert 4 noch aktiv wäre.
Ich kann nun ActivePropertyChanged abbrechen. Was nichts bringt, da schon auf Wert 3 gewechselt wurde.
-
Ok, dann willst du imgrunde "nach" ActiceComponentChanged eine Funktion ausführen.
Also dann vielleicht ein Dispatcher.Invoke?