Ich habe es selbst herausgefunden, indem ich die Richtlinien im Abschnitt "Hinweise für Vererber" der Dokumentation WeakEventManager befolgte. Hier ist eine grundlegende Implementierung von WeakEventManager
. Die Klasse, die das Ereignis beschafft, heißt PropertyValue
und das Ereignis heißt Changed
.
public class PropertyValueChangedEventManager : WeakEventManager
{
public static PropertyValueChangedEventManager CurrentManager
{
get
{
var manager_type = typeof(PropertyValueChangedEventManager);
var manager = WeakEventManager.GetCurrentManager(manager_type) as PropertyValueChangedEventManager;
if (manager == null)
{
manager = new PropertyValueChangedEventManager();
WeakEventManager.SetCurrentManager(manager_type, manager);
}
return manager;
}
}
public static void AddListener(PropertyValue source, IWeakEventListener listener)
{
CurrentManager.ProtectedAddListener(source, listener);
}
public static void RemoveListener(PropertyValue source, IWeakEventListener listener)
{
CurrentManager.ProtectedRemoveListener(source, listener);
}
protected override void StartListening(object source)
{
((PropertyValue)source).Changed += DeliverEvent;
}
protected override void StopListening(object source)
{
((PropertyValue)source).Changed -= DeliverEvent;
}
}
Microsoft bietet PropertyChangedEventManager (http://msdn.microsoft.com/en-us/library/system.componentmodel.propertychangedeventmanager.aspx) und CollectionChangedEventManager (http://msdn.microsoft.com/en-us/ Bibliothek/system.collections.specialized.collectionchangedeventmanager.aspx) in .NET integriert. –
Danke für Ihr Beispiel. Obwohl die kürzere Implementierung '((PropertyValue) -Quelle) ist .Changed + = DeliverEvent;' –
@ Alpha-Maus: Wo genau ist das "schwache" in Ihrer "kürzeren Implementierung"? Ich kann es nicht finden. –