Sie sollten die System.ComponentModel.BindingList , insbesondere die ListChanged-Ereignis .
Eine BindingList ist wahrscheinlich die beste Option, da sie eine Änderungsverfolgung und eine Vielzahl von vorhandenen Ereignissen enthält, die Sie verwenden können. Im Folgenden finden Sie ein Beispiel für das Einblenden eines benutzerdefinierten Ereignisses für "Hinzufügen", das zum BindingList-Ereignis weiterleitet.
%Vor%Eine Alternative zu BindingList ist ObservableCollection - in diesem Fall möchten Sie Ihr Abo abonnieren eigene Event-Handler zum CollectionChanged -Ereignis und feuern Sie Ihr Event abhängig von der Aktion ab.
David Mohundro zeigt einen Ansatz; eine andere Möglichkeit besteht darin, von Collection & lt; T & gt; und überschreiben Sie die verschiedenen Methoden:
%Vor%Schließlich könnten Sie Ihre eigene Liste (IList, IList & lt; T & gt;) aus den ersten Prinzipien erstellen - viel Arbeit, wenig Nutzen.
Ein nicht-orthodoxer Ansatz könnte ein AOP-Framework wie PostSharp verwenden, um einen Handler vor / nach dem Aufruf des Accessors zu "weben", der ein Ereignis auslöst.
Sie erstellen eine externe Klasse, die den Pre- und / oder Post-Handling-Code für den Zugriff auf Ihre Property enthält. Überprüfen Sie, ob sich der Wert der Property zwischen Pre und Post geändert hat und ein Ereignis ausgelöst wird.
Bedenken Sie, dass Sie während des Vergleichs (innerhalb Ihres Handler-Codes) möglicherweise in eine Endlosschleife gelangen (Sie rufen den Property-Accessor auf, der den AOP-Handler aufruft, der den Accessor usw. aufruft) Möglicherweise müssen Sie in die Klasse mit dieser Eigenschaft reflektieren, um das Hintergrundfeld zu erreichen.
Sie müssen die Liste nicht direkt als Eigenschaft verfügbar machen und vielleicht müssen Ihre Klasse IList oder andere implementieren, damit Ihr Event-Handler die Add () - Methode auslöst.
Tags und Links c# properties event-handling