public void WeakEventManagerShouldRemoveWeakListenersPropertyChanged()
        {
            const int    count        = 100;
            const string propertyName = "test";

            var model     = new BindingSourceModel();
            var listeners = new List <WeakReference>();
            IWeakEventManager weakEventManager = CreateWeakEventManager();

            for (int i = 0; i < count; i++)
            {
                var listenerMock = new EventListenerMock();
                weakEventManager.Subscribe(model, propertyName, listenerMock);
                listeners.Add(new WeakReference(listenerMock));
                listenerMock.Handle = (o, o1) => { };
            }
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            model.OnPropertyChanged(propertyName + "1");
            model.OnPropertyChanged(propertyName);
            model.OnPropertyChanged(propertyName);

            listeners.All(reference => reference.Target == null).ShouldBeTrue();
        }
 public static void Initialize(IBindingProvider bindingProvider          = null, IBindingManager bindingManager = null,
                               IBindingResourceResolver resourceResolver = null, IBindingMemberProvider memberProvider = null, IVisualTreeManager visualTreeManager  = null,
                               IWeakEventManager weakEventManager        = null, IObserverProvider observerProvider    = null, IBindingContextManager contextManager = null, IBindingErrorProvider errorProvider = null,
                               Func <IBindingMemberInfo, Type, object, object> converter = null, Func <string, IBindingPath> bindingPathFactory = null,
                               Func <Type, string, IBindingMemberInfo> findUpdateEvent   = null, Func <CultureInfo> bindingCultureInfo          = null, IDictionary <string, IBindingBehavior> bindingModeBehaviors = null)
 {
     ValueConverter     = converter ?? ((info, type, arg3) => arg3);
     BindingProvider    = bindingProvider ?? new BindingProvider();
     BindingManager     = bindingManager ?? new BindingManager();
     ResourceResolver   = resourceResolver ?? new BindingResourceResolver();
     MemberProvider     = memberProvider ?? new BindingMemberProvider();
     VisualTreeManager  = visualTreeManager ?? new VisualTreeManager();
     WeakEventManager   = weakEventManager ?? new WeakEventManager();
     ObserverProvider   = observerProvider ?? new ObserverProvider();
     ContextManager     = contextManager ?? new BindingContextManager();
     BindingPathFactory = bindingPathFactory ?? BindingPathFactoryDefaultImpl;
     UpdateEventFinder  = findUpdateEvent ?? FindUpdateEventDefaultImpl;
     BindingCultureInfo = bindingCultureInfo ?? BindingCultureInfoDefaultImpl;
     ErrorProvider      = errorProvider;
     if (bindingModeBehaviors == null)
     {
         InitializeDefaultBindingModeBehaviors();
     }
     else
     {
         foreach (var behavior in bindingModeBehaviors)
         {
             BindingModeToBehavior[behavior.Key] = behavior.Value;
         }
     }
 }
        public void WeakEventManagerShouldSubscribeAndUnsubscribePropertyChangedEventSeveralSources()
        {
            const int    count        = 100;
            const string propertyName = "test";

            var model        = new BindingSourceModel();
            var listeners    = new List <EventListenerMock>();
            var invokedItems = new List <EventListenerMock>();
            IWeakEventManager weakEventManager = CreateWeakEventManager();

            for (int i = 0; i < count; i++)
            {
                var listenerMock = new EventListenerMock();
                var disposable   = weakEventManager.Subscribe(model, propertyName, listenerMock);
                listeners.Add(listenerMock);
                listenerMock.Handle = (o, o1) =>
                {
                    invokedItems.Add(listenerMock);
                    disposable.Dispose();
                };
            }
            model.OnPropertyChanged(propertyName + "1");
            model.OnPropertyChanged(propertyName);
            model.OnPropertyChanged(propertyName);

            invokedItems.Count.ShouldEqual(count);
            foreach (var listener in listeners)
            {
                invokedItems.Contains(listener).ShouldBeTrue();
            }
        }
        public void WeakEventManagerShouldReturnNullInvalidEvent()
        {
            var model = new BindingSourceModel();
            IWeakEventManager weakEventManager = CreateWeakEventManager();

            weakEventManager.TrySubscribe(model, BindingSourceModel.InvalidEventName, new EventListenerMock()).ShouldBeNull();
        }
Пример #5
0
 internal static void SetDefaultValues()
 {
     _valueConverter    = BindingReflectionExtensions.Convert;
     _resourceResolver  = new BindingResourceResolver();
     _memberProvider    = new BindingMemberProvider();
     _visualTreeManager = new VisualTreeManager();
     _weakEventManager  = new WeakEventManager();
     _bindingManager    = new BindingManager();
     _bindingProvider   = new BindingProvider();
     _observerProvider  = new ObserverProvider();
     _contextManager    = new BindingContextManager();
 }
Пример #6
0
        /// <summary>
        /// Attempts to subscribe to the event.
        /// </summary>
        public static IDisposable TrySubscribe([NotNull] this IWeakEventManager eventManager, [NotNull] object target, string eventName, IEventListener listener,
                                               IDataContext context = null)
        {
            Should.NotBeNull(eventManager, "eventManager");
            Should.NotBeNull(target, "target");
            var @event = target.GetType().GetEventEx(eventName, MemberFlags.Instance | MemberFlags.Public);

            if (@event == null)
            {
                throw BindingExceptionManager.MissingEvent(target, eventName);
            }
            return(eventManager.TrySubscribe(target, @event, listener, context));
        }
 internal static void SetDefaultValues()
 {
     BindingCultureInfo  = null;
     _updateEventFinder  = FindUpdateEvent;
     _bindingPathFactory = BindingPath.Create;
     _valueConverter     = BindingReflectionExtensions.Convert;
     _resourceResolver   = new BindingResourceResolver();
     _memberProvider     = new BindingMemberProvider();
     _visualTreeManager  = new VisualTreeManager();
     _weakEventManager   = new WeakEventManager();
     _bindingManager     = new BindingManager();
     _bindingProvider    = new BindingProvider();
     _observerProvider   = new ObserverProvider();
     _contextManager     = new BindingContextManager();
 }
        public void WeakEventManagerShouldSubscribeAndUnsubscribeEvent()
        {
            int invokedCount = 0;
            var model        = new BindingSourceModel();
            var listenerMock = new EventListenerMock();
            IWeakEventManager weakEventManager = CreateWeakEventManager();
            var disposable = weakEventManager.TrySubscribe(model, BindingSourceModel.EventName, listenerMock);

            listenerMock.Handle = (o, o1) => invokedCount++;

            invokedCount.ShouldEqual(0);
            model.RaiseEvent();
            invokedCount.ShouldEqual(1);

            disposable.Dispose();
            model.RaiseEvent();
            invokedCount.ShouldEqual(1);
        }
        public void WeakEventManagerShouldSubscribeAndUnsubscribePropertyChangedEvent()
        {
            const string      propertyName     = "test";
            int               invokedCount     = 0;
            var               model            = new BindingSourceModel();
            var               listenerMock     = new EventListenerMock();
            IWeakEventManager weakEventManager = CreateWeakEventManager();
            var               disposable       = weakEventManager.Subscribe(model, propertyName, listenerMock);

            listenerMock.Handle = (o, o1) => invokedCount++;
            invokedCount.ShouldEqual(0);

            model.OnPropertyChanged(propertyName + "1");
            invokedCount.ShouldEqual(0);
            model.OnPropertyChanged(propertyName);
            invokedCount.ShouldEqual(1);

            disposable.Dispose();

            model.OnPropertyChanged(propertyName);
            invokedCount.ShouldEqual(1);
        }
        public void WeakEventManagerShouldRemoveWeakListenersEvent()
        {
            const int count = 100;

            var model     = new BindingSourceModel();
            var listeners = new List <WeakReference>();
            IWeakEventManager weakEventManager = CreateWeakEventManager();

            for (int i = 0; i < count; i++)
            {
                var listenerMock = new EventListenerMock();
                weakEventManager.TrySubscribe(model, BindingSourceModel.EventName, listenerMock);
                listeners.Add(new WeakReference(listenerMock));
                listenerMock.Handle = (o, o1) => { };
            }
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            model.RaiseEvent();
            model.RaiseEvent();

            listeners.All(reference => reference.Target == null).ShouldBeTrue();
        }
Пример #11
0
 private void InitializeDependencies()
 {
     _weakEventManagerFactory = ServiceProvider.GetRequiredService <IWeakEventManagerFactory>();
     _bindingFactory          = ServiceProvider.GetRequiredService <IBindingFactory>();
     _weakEventManager        = _weakEventManagerFactory.Create();
 }
 internal static void SetDefaultValues()
 {
     BindingCultureInfo = null;
     _updateEventFinder = FindUpdateEvent;
     _bindingPathFactory = BindingPath.Create;
     _valueConverter = BindingReflectionExtensions.Convert;
     _resourceResolver = new BindingResourceResolver();
     _memberProvider = new BindingMemberProvider();
     _visualTreeManager = new VisualTreeManager();
     _weakEventManager = new WeakEventManager();
     _bindingManager = new BindingManager();
     _bindingProvider = new BindingProvider();
     _observerProvider = new ObserverProvider();
     _contextManager = new BindingContextManager();
 }
Пример #13
0
 public Binding(INotifyPropertyChanged source, PropertyInfo propertyInfo, IWeakEventManager weakEventManager)
 {
     _weakEventManager = weakEventManager ?? throw new ArgumentNullException(nameof(weakEventManager));
     Source            = source ?? throw new ArgumentNullException(nameof(source));
     PropertyInfo      = propertyInfo ?? throw new ArgumentNullException(nameof(propertyInfo));
 }
Пример #14
0
 public IBinding Create(INotifyPropertyChanged source, PropertyInfo propertyInfo, IWeakEventManager weakEventManager)
 {
     return(new Binding(source, propertyInfo, weakEventManager));
 }