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(); }
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(); }
/// <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(); }
private void InitializeDependencies() { _weakEventManagerFactory = ServiceProvider.GetRequiredService <IWeakEventManagerFactory>(); _bindingFactory = ServiceProvider.GetRequiredService <IBindingFactory>(); _weakEventManager = _weakEventManagerFactory.Create(); }
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)); }
public IBinding Create(INotifyPropertyChanged source, PropertyInfo propertyInfo, IWeakEventManager weakEventManager) { return(new Binding(source, propertyInfo, weakEventManager)); }