Esempio n. 1
0
        public static NotifyCollectionChangedEventHandler MakeWeak(NotifyCollectionChangedEventHandler handler, Action<NotifyCollectionChangedEventHandler> remove)
        {
            var reference = new WeakReference(handler.Target);
            var method = handler.GetMethodInfo();

            NotifyCollectionChangedEventHandler newHandler = null;
            newHandler = (sender, e) =>
            {
                var target = reference.Target;
                if (target != null)
                {
                    method.Invoke(target, new object[] { sender, e });
                }
                else
                {   
                    // Collected, unhook us
                    remove(newHandler);
                }
            };

            return newHandler;
        }