예제 #1
0
        private static WeakListenerInternal CreateWeakListener(object target, object state)
        {
            var eventInfo        = (EventInfo)state;
            var listenerInternal = new WeakListenerInternal(target, eventInfo);

            listenerInternal.Handler = eventInfo.EventHandlerType == typeof(EventHandler)
                ? new EventHandler(listenerInternal.Raise)
                : ServiceProvider.ReflectionManager.TryCreateDelegate(eventInfo.EventHandlerType,
                                                                      listenerInternal, WeakListenerInternal.HandleMethod);
            if (listenerInternal.Handler == null)
            {
                return(WeakListenerInternal.EmptyListener);
            }
#if PCL_WINRT
            var addMethod = eventInfo.AddMethod;
#else
            var addMethod = eventInfo.GetAddMethod(true);
#endif
            if (addMethod == null)
            {
                return(WeakListenerInternal.EmptyListener);
            }
            listenerInternal.RegToken = addMethod.InvokeEx(target, listenerInternal.Handler);
            return(listenerInternal);
        }
 static WeakListenerInternal()
 {
     Empty = new WeakEventListenerWrapper[0];
     AddSourceEventDelegate = AddSourceEvent;
     UpdateSourceEventDelegate = UpdateSourceEvent;
     HandleMethod = typeof(WeakListenerInternal).GetMethodEx("Raise", MemberFlags.Public | MemberFlags.Instance);
     EmptyListener = new WeakListenerInternal();
 }
예제 #3
0
 static WeakListenerInternal()
 {
     Empty = new WeakEventListenerWrapper[0];
     AddSourceEventDelegate    = AddSourceEvent;
     UpdateSourceEventDelegate = UpdateSourceEvent;
     HandleMethod  = typeof(WeakListenerInternal).GetMethodEx("Raise", MemberFlags.Public | MemberFlags.Instance);
     EmptyListener = new WeakListenerInternal();
 }
예제 #4
0
        private static WeakListenerInternal CreateContextListener(object src, object state)
        {
            var listenerInternal = new WeakListenerInternal(src, null);
            var handler          = new EventHandler <ISourceValue, EventArgs>(listenerInternal.Raise);

            listenerInternal.Handler = handler;
            BindingServiceProvider.ContextManager.GetBindingContext(src).ValueChanged += handler;
            return(listenerInternal);
        }
예제 #5
0
        private static WeakListenerInternal CreateContextListener(object src, object state)
        {
            var context          = (IBindingContext)state;
            var listenerInternal = new WeakListenerInternal(src, null);
            var handler          = new EventHandler <ISourceValue, EventArgs>(listenerInternal.Raise);

            listenerInternal.Handler = handler;
            context.ValueChanged    += handler;
            return(listenerInternal);
        }
        private static WeakListenerInternal CreateWeakListener(object target, object state)
        {
            var eventInfo = (EventInfo)state;
            var listenerInternal = new WeakListenerInternal(target, eventInfo);
            listenerInternal.Handler = eventInfo.EventHandlerType == typeof(EventHandler)
                ? new EventHandler(listenerInternal.Raise)
                : ServiceProvider.ReflectionManager.TryCreateDelegate(eventInfo.EventHandlerType,
                    listenerInternal, WeakListenerInternal.HandleMethod);
            if (listenerInternal.Handler == null)
                return WeakListenerInternal.EmptyListener;
#if PCL_WINRT
            var addMethod = eventInfo.AddMethod;
#else
            var addMethod = eventInfo.GetAddMethod(true);
#endif
            if (addMethod == null)
                return WeakListenerInternal.EmptyListener;
            listenerInternal.RegToken = addMethod.InvokeEx(target, listenerInternal.Handler);
            return listenerInternal;
        }
 private static WeakListenerInternal CreateContextListener(object src, object state)
 {
     var context = (IBindingContext)state;
     var listenerInternal = new WeakListenerInternal(src, null);
     var handler = new EventHandler<ISourceValue, EventArgs>(listenerInternal.Raise);
     listenerInternal.Handler = handler;
     context.ValueChanged += handler;
     return listenerInternal;
 }
 private static WeakListenerInternal UpdateSourceEvent(object source,
     Func<object, object, WeakListenerInternal> addValue, WeakListenerInternal currentValue, object state)
 {
     var array = (object[])state;
     var weakItem = (WeakEventListenerWrapper)array[1];
     array[2] = currentValue.AddInternal(weakItem, true);
     return currentValue;
 }
예제 #9
0
            private static WeakListenerInternal UpdateSourceEvent(object source,
                                                                  Func <object, object, WeakListenerInternal> addValue, WeakListenerInternal currentValue, object state)
            {
                var array    = (object[])state;
                var weakItem = (WeakEventListenerWrapper)array[1];

                array[2] = currentValue.AddInternal(weakItem, true);
                return(currentValue);
            }