/// <summary> /// Crea un handler debil para eventos de tipo <c>EventHandler_v2</c>, /// </summary> /// <param name="eventHandler">Handler origen.</param> /// <param name="unregister">Delegado para deregistrar el evento.</param> /// <returns>Handler debil.</returns> public static IWeakEventHandler <EventHandler_v2 <T> > MakeWeak <T>( this EventHandler_v2 <T> eventHandler, UnregisterCallback <EventHandler_v2 <T> > unregister) where T : EventArgs { return(MakeWeak <EventHandler_v2 <T>, T>(eventHandler, unregister)); }
public void Test1() { WeakEventHandlerManager manager = new WeakEventHandlerManager(); int[] eventCount_delegate = new int[1]; EventHandler_v2 <ListEventArgs> count_delegate = (sender, args) => { eventCount_delegate[0]++; }; DisposableCounter disposable = new DisposableCounter(); manager.For <EventList <int> >().RegisterWeak("Count_delegate", count_delegate, (x, h) => x.ListChanged += h, (x, h) => x.ListChanged -= h); manager.For <EventList <int> >().RegisterWeak <ListEventArgs>("Count_static", Count_static, (x, h) => x.ListChanged += h, (x, h) => x.ListChanged -= h); manager.For <EventList <int> >().RegisterWeak <ListEventArgs>("Count_instance", this.Count_instance, (x, h) => x.ListChanged += h, (x, h) => x.ListChanged -= h); manager.For <EventList <int> >().RegisterWeak <ListEventArgs>("Count_disposable", disposable.Count, (x, h) => x.ListChanged += h, (x, h) => x.ListChanged -= h); { eventCount_delegate[0] = 0; this.eventCount_instance = 0; eventCount_static = 0; EventList <int> eventList = new EventList <int>(); manager.AddWeak("Count_delegate", eventList); manager.AddWeak("Count_static", eventList); manager.AddWeak("Count_instance", eventList); manager.AddWeak("Count_disposable", eventList); eventList.Add(0); eventList.Add(5); eventList.Add(10); eventList.Add(15); eventList.Add(20); eventList = null; GC.Collect(); GC.WaitForPendingFinalizers(); Debug.WriteLine("eventCount_delegate = " + eventCount_delegate[0]); Debug.WriteLine("eventCount_static = " + eventCount_static); Debug.WriteLine("eventCount_instance = " + this.eventCount_instance); Debug.WriteLine("eventCount_disposable = " + disposable.eventCount_disposable); } manager.RemoveWeak("ListChanged"); }
/// <summary> /// Gestiona los eventos de multiples propiedades. /// </summary> public RegisterForImp <TSender> RegisterAllProperties(EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, bool valuesToManager = true) { return(this.RegisterAllProperties(eventHandler, (sender, h) => sender.PropertyChanged += h, (sender, h) => sender.PropertyChanged -= h, valuesToManager)); }
public EventListener_v2(EventHandler_v2 <TEventArgs> eventHandler, RegisterCallback <EventHandler_v2 <TEventArgs> > register, UnregisterCallback <EventHandler_v2 <TEventArgs> > unregister) { this.register = register; this.unregister = unregister; this.eventHandler = eventHandler; }
/// <summary> /// Crea un handler debil para eventos de tipo <c>EventHandler_v2</c>, /// </summary> /// <param name="eventHandler">Handler origen.</param> /// <param name="register">Delegado para registrar el evento.</param> /// <param name="unregister">Delegado para deregistrar el evento.</param> /// <returns>Handler debil.</returns> public static IWeakEventHandler <EventHandler_v2 <T> > WeakListen <T>( this EventHandler_v2 <T> eventHandler, RegisterCallback <EventHandler_v2 <T> > register, UnregisterCallback <EventHandler_v2 <T> > unregister) where T : EventArgs { return(WeakListen <EventHandler_v2 <T>, T>(eventHandler, register, unregister)); }
public AllPropertiesListener(EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, RegisterCallback <EventHandler_v2 <PropertyChangedExEventArgs> > register, UnregisterCallback <EventHandler_v2 <PropertyChangedExEventArgs> > unregister, bool valuesToManager) : base(eventHandler, register, unregister) { this.ValuesToManager = valuesToManager; }
public ForSource <TSource> RegisterWeak <TEventArgs>(string name, EventHandler_v2 <TEventArgs> eventHandler, RegisterCallback <TSource, EventHandler_v2 <TEventArgs> > register, UnregisterCallback <TSource, EventHandler_v2 <TEventArgs> > unregister) where TEventArgs : EventArgs { this.manager.RegisterWeak <TSource, EventHandler_v2 <TEventArgs>, TEventArgs>(name, eventHandler, register, unregister); return(this); }
/// <summary> /// Gestiona los eventos de una propiedad. /// </summary> public RegisterForImp <TSender> RegisterProperty <TItem>(string propertyName, Func <TSender, TItem> getValue, EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, bool valuesToManager = true) { return(this.RegisterProperty(propertyName, getValue, eventHandler, (sender, h) => sender.PropertyChanged += h, (sender, h) => sender.PropertyChanged -= h, valuesToManager)); }
/// <summary> /// Gestiona los eventos de una lista. /// </summary> public RegisterForImp <TSender> RegisterList <TItem>(Func <TSender, IEventList <TItem> > getValues, EventHandler_v2 <ListEventArgs> eventHandler, bool valuesToManager = true) { return(this.RegisterList(getValues, eventHandler, (sender, h) => getValues(sender).ListChanged += h, (sender, h) => getValues(sender).ListChanged -= h, valuesToManager)); }
/// <summary> /// Gestiona los eventos de una coleccion. /// </summary> public RegisterForImp <TSender> RegisterCollection <TItem>(Func <TSender, IEventCollection <TItem> > getValues, EventHandler_v2 <CollectionEventArgs> eventHandler, bool valuesToManager = true) { return(this.RegisterCollection(getValues, eventHandler, (sender, h) => getValues(sender).CollectionChanged += h, (sender, h) => getValues(sender).CollectionChanged -= h, valuesToManager)); }
public ListListener(EventHandler_v2 <ListEventArgs> eventHandler, Func <object, IList <TItem> > getValues, RegisterCallback <EventHandler_v2 <ListEventArgs> > register, UnregisterCallback <EventHandler_v2 <ListEventArgs> > unregister, bool valuesToManager) : base(eventHandler, register, unregister) { this.ValuesToManager = valuesToManager; this.getValues = getValues; }
/// <summary> /// Gestiona los eventos de multiples propiedades. /// </summary> public RegisterForImp <TSender> RegisterProperties(Type[] propertyTypes, string[] propertyNames, Func <TSender, object>[] getValues, EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, bool valuesToManager = true) { return(this.RegisterProperties(propertyTypes, propertyNames, getValues, eventHandler, (sender, h) => sender.PropertyChanged += h, (sender, h) => sender.PropertyChanged -= h, valuesToManager)); }
/// <summary> /// Gestiona los eventos genericos. /// </summary> public RegisterForImp <TSender> Register <TEventArgs>(EventHandler_v2 <TEventArgs> eventHandler, RegisterCallback <TSender, EventHandler_v2 <TEventArgs> > register, UnregisterCallback <TSender, EventHandler_v2 <TEventArgs> > unregister) where TEventArgs : EventArgs { ListenerManager.EventListener_v2 <TEventArgs> listener = new ListenerManager.EventListener_v2 <TEventArgs>(eventHandler, (sender, h) => register((TSender)sender, h), (sender, h) => unregister((TSender)sender, h)); this.manager.Add <TSender>(listener); return(this); }
public RegisterForImp <TSender> RegisterProperties(Tuple <Type, string, Func <TSender, object> >[] properties, EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, bool valuesToManager = true) { return(this.RegisterProperties(properties.Select(x => x.Item1).ToArray(), properties.Select(x => x.Item2).ToArray(), properties.Select(x => x.Item3).ToArray(), eventHandler, (sender, h) => sender.PropertyChanged += h, (sender, h) => sender.PropertyChanged -= h, valuesToManager)); }
/// <summary> /// Gestiona los eventos de multiples propiedades. /// </summary> public RegisterForImp <TSender> RegisterAllProperties(EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, RegisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > register, UnregisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > unregister, bool valuesToManager = false) { ListenerManager.AllPropertiesListener listener = new ListenerManager.AllPropertiesListener(eventHandler, (sender, h) => register((TSender)sender, h), (sender, h) => unregister((TSender)sender, h), valuesToManager); this.manager.Add <TSender>(listener); return(this); }
/// <summary> /// Gestiona los eventos de una coleccion. /// </summary> public RegisterForImp <TSender> RegisterCollection <TItem>(Func <TSender, ICollection <TItem> > getValues, EventHandler_v2 <CollectionEventArgs> eventHandler, RegisterCallback <TSender, EventHandler_v2 <CollectionEventArgs> > register, UnregisterCallback <TSender, EventHandler_v2 <CollectionEventArgs> > unregister, bool valuesToManager = true) { ListenerManager.CollectionListener <TItem> listener = new ListenerManager.CollectionListener <TItem>(eventHandler, sender => getValues((TSender)sender), (sender, h) => register((TSender)sender, h), (sender, h) => unregister((TSender)sender, h), valuesToManager); this.manager.Add <TSender>(listener); return(this); }
public PropertyListener(Type propertyType, EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, string propertyName, Func <object, object> getValue, RegisterCallback <EventHandler_v2 <PropertyChangedExEventArgs> > register, UnregisterCallback <EventHandler_v2 <PropertyChangedExEventArgs> > unregister, bool valuesToManager) : base(eventHandler, register, unregister) { this.PropertyType = propertyType; this.ValuesToManager = valuesToManager; this.PropertyName = propertyName; this.GetValue = getValue; }
public PropertiesListener(EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, Type[] propertyTypes, string[] propertyNames, Func <object, object>[] getValues, RegisterCallback <EventHandler_v2 <PropertyChangedExEventArgs> > register, UnregisterCallback <EventHandler_v2 <PropertyChangedExEventArgs> > unregister, bool valuesToManager) : base(eventHandler, register, unregister) { this.ValuesToManager = valuesToManager; this.propertyTypes = propertyTypes; this.propertyNames = new Dictionary <string, int>(); for (int i = 0; i < propertyNames.Length; i++) { this.propertyNames.Add(propertyNames[i], i); } this.getValues = getValues; }
/// <summary> /// Gestiona los eventos de multiples propiedades. /// </summary> public RegisterForImp <TSender> RegisterProperties(Type[] propertyTypes, string[] propertyNames, Func <TSender, object>[] getValues, EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, RegisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > register, UnregisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > unregister, bool valuesToManager = true) { ListenerManager.PropertiesListener listener = new ListenerManager.PropertiesListener(eventHandler, propertyTypes, propertyNames, getValues.Select(getValue => (Func <object, object>)(sender => getValue((TSender)sender))).ToArray(), (sender, h) => register((TSender)sender, h), (sender, h) => unregister((TSender)sender, h), valuesToManager); this.manager.Add <TSender>(listener); return(this); }
/// <summary> /// Gestiona los eventos de una propiedad. /// </summary> public RegisterForImp <TSender> RegisterProperty <TItem>(string propertyName, Func <TSender, TItem> getValue, EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, RegisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > register, UnregisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > unregister, bool valuesToManager = true) { ListenerManager.PropertyListener <TItem> listener = new ListenerManager.PropertyListener <TItem>(eventHandler, propertyName, sender => getValue((TSender)sender), (sender, h) => register((TSender)sender, h), (sender, h) => unregister((TSender)sender, h), valuesToManager); foreach (ListenerManager.Listener aux in this.manager.FindListenersOfExactType(typeof(TSender))) { if (aux is ListenerManager.PropertyListener) { ListenerManager.PropertyListener aux2 = (ListenerManager.PropertyListener)aux; if (aux2.Compatible(listener)) { ListenerManager.PropertiesListener newListener = ListenerManager.PropertiesListener.Join(aux2, listener); this.manager.Remove <TSender>(aux2); this.manager.Add <TSender>(newListener); return(this); } } else if (aux is ListenerManager.PropertiesListener) { ListenerManager.PropertiesListener aux2 = (ListenerManager.PropertiesListener)aux; if (aux2.Compatible(listener)) { ListenerManager.PropertiesListener newListener = ListenerManager.PropertiesListener.Join(aux2, listener); this.manager.Remove <TSender>(aux2); this.manager.Add <TSender>(newListener); return(this); } } } this.manager.Add <TSender>(listener); return(this); }
public void Add(EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, string propertyName, Func <object, TItem> getValue) { this.partials.Add(propertyName, new Partial(propertyName, eventHandler, getValue)); }
public Partial(string propertyName, EventHandler_v2 <PropertyChangedExEventArgs> eventHandler, Func <object, TItem> getValue) { this.PropertyName = propertyName; this.EventHandler_v2 = eventHandler; this.GetValue = getValue; }