Laden...

ObservableLinkCollection Remove-Methode erweitern, um Benutzer zu fragen, ob löschen ok

Erstellt von Fr3dd1 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.356 Views
F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 13 Jahren
ObservableLinkCollection Remove-Methode erweitern, um Benutzer zu fragen, ob löschen ok

Hallo zusammen,

ich habe eine Frage zur ObservableCollection in C# WPF. Und zwar habe ich eine solche Collection mit Objekten gefüllt. Bevor eines dieser Elemente aus der Liste gelöscht wird, soll jetzt noch eine Aktion durchgeführt werden. Das wichtige ist, dass dies VOR dem Entfernen passiert und nicht erst danach. Ich bräuchte quasi sowas wie "Preview"-Remove. Gibt es da eine Möglichkeit, ohne von ObservableCollection abzuleiten?

Gruß Fr3dd1

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Fr3dd1,

du kannst versuchen, eine Extension Method zu schrieben. Warum möchtest du nicht von ObservableCollection ableiten?

zero_x

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

Das Ableiten wäre die einzige richtige Vorgehensweise.

Was soll denn noch gemacht werden vor dem entfernen? Diejenige Methode die Remove aufruft, kann doch auch das zusätzliche machen. Wenn der zusätzliche Code irgendwas mit den Items selber machen soll vor dem entfernen, dann wäre es nur angebracht abzuleiten um dieses Spezialverhalten zu zeigen zumal der Code dann wahrscheinlich eh nur für bestimmte Typen funktionieren würde oder?

Btw.: Seit .Net 4 ist die ObservableCollection kein Bestandteil von WPF mehr sondern ist in die Base Class Library reingewandert.

Baka wa shinanakya naoranai.

Mein XING Profil.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Fr3dd1,

Das Ableiten wäre die einzige richtige Vorgehensweise.

korrekt. Und das geht auch. Zwar ist ObservableCollection<T>.Remove nicht virtuell und kann daher nicht überschrieben werden (und new ist kein Ersatz override), aber es gibt ein virtuelles RemoveItem extra für diesen Zweck.

herbivore

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 13 Jahren

Ich habe jetzt erstmal die Methode mit dem Ableiten gemacht und es klappt einwandfrei.
Die Sache ist folgende:
Ich habe ein DataGrid und daran die Liste gebunden. Wenn ich jetzt ein Element aus dem DataGrid entferne (per Del Taste zum Beispiel) Soll erst gefragt werden, ob das Element wirklich gelöscht werden soll. Gibt es da vielleicht irgendwelche Events vom Datagrid oder sowas?

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

mit deiner Abfrage bist du in der ObservableCollection aber völlig an der falschen Stelle. Es macht ja keinen Sinn GUI Code in ner Collection zu haben.

Wenn du nen DataGrid verwendest ist es natürlich auch nur sinnvoll dort anzusetzen. Dort werden ja wie in WPF üblich Commands benutzt, so hier das DeleteCommand. Und vor dessen Excecute muss man nun eingreifen.

Am einfachsten ist es, einfach in XAML das PreviewExecuted attached Event vom CommandManager zu verwenden. Dort im Eventhandler kannst du prüfen obs das Delete Command war, dann deine Abfrage machen ob gelöscht werden soll und je nach Userwahl entweder nichts machen, oder das Event mit Handled = true bestätigen und dann abbrechen. Dann wird das löschen auch nicht mehr durchgeführt.

PS: Habs Thema jetzt auch verschoben da es doch eindeutig nen GUI Thema ist.

Baka wa shinanakya naoranai.

Mein XING Profil.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo talla,

Es macht ja keinen Sinn GUI Code in ner Collection zu haben.

das macht natürlich keinen Sinn! Aber es ging ja wohl darum, ein Event vor dem Hinzufügen zu feuern. Das GUI kann dann dafür einen EventHandler registrieren und damit wäre der GUI Code wieder im GUI. Ob dieses Vorgehen insgesamt Sinn macht, habe ich nicht vollständig durchdacht. Meine Erwiderung bezieht sich nur auf den Punkt, dass es keine zwangsläufige Folge des ObservableCollection-Ansatz ist, dass GUI-Code in die Collection wandert.

herbivore