Lo descubrí por mi cuenta siguiendo las instrucciones en la sección "Notas para los herederos" de la documentación WeakEventManager. Aquí hay una implementación básica de WeakEventManager
. La clase que obtiene el evento se llama PropertyValue
y el evento se llama 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 proporciona PropertyChangedEventManager (http://msdn.microsoft.com/en-us/library/system.componentmodel.propertychangedeventmanager.aspx) y CollectionChangedEventManager (http://msdn.microsoft.com/en-us/ library/system.collections.specialized.collectionchangedeventmanager.aspx) integrado en .NET. –
Gracias por su ejemplo. A pesar de que la implementación más corta será '((PropertyValue) source) .Changed + = DeliverEvent;' –
@ alpha-mouse: ¿Dónde exactamente está el "débil" en su "implementación más corta"? No puedo encontrarlo. –