Example #1
0
        public void EventHandlerShouldBeWeak()
        {
            bool eventReceived = false;
            var  listener      = new PropertyChangedListener();

            WeakEventHandler <PropertyChangedEventHandler, PropertyChangedEventArgs> .Register(
                this,
                listener,
                handler => new PropertyChangedEventHandler(handler),
                (s, h) => s.PropertyChanged += h,
                (s, h) => s.PropertyChanged -= h,
                (l, s, e) => { l.OnEvent(s, e); eventReceived = true; });

            RaiseEvent();
            Assert.IsTrue(listener.EventReceived);
            Assert.IsTrue(eventReceived);

            listener.Reset();
            eventReceived = false;
            listener      = null;
            GC.Collect();

            RaiseEvent();
            Assert.IsFalse(eventReceived);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ActionCommand"/> class.
        /// </summary>
        /// <param name="target">The target.</param>
        /// <param name="methodName">Name of the method.</param>
        public ActionCommand(object target, string methodName)
        {
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }

            targetReference = new WeakReference(target);
            method          = target.GetType().GetMethod(methodName);
            if (method == null)
            {
                throw new ArgumentException(@"Specified method cannot be found.", "methodName");
            }

            guardName = "Can" + method.Name;
            var guard = target.GetType().GetMethod("get_" + guardName);
            var inpc  = target as INotifyPropertyChanged;

            if (inpc == null || guard == null)
            {
                return;
            }

            WeakEventHandler.Register <PropertyChangedEventArgs>(inpc, "PropertyChanged", OnPropertyChanged);
            canExecute = new WeakFunc <bool>(inpc, guard);
        }
Example #3
0
        private void OnPieChartChanged(DependencyObject source)
        {
            // Unsubscribe from previous collection.
            if (_pieChartSubscription != null)
            {
                _pieChartSubscription.Dispose();
                _pieChartSubscription = null;
            }

            // Get pie chart from source.
            if (source != null)
                _pieChart = source.GetVisualSubtree().OfType<PieChart>().FirstOrDefault();

            if (_pieChart != null)
            {
                // Bind legend title to pie chart title.
                SetBinding(TitleProperty, new Binding("Title") { Source = _pieChart });

                // Subscribe to changes in pie chart using weak event pattern.
                _pieChartSubscription =
                    WeakEventHandler<EventArgs>.Register(
                        _pieChart,
                        this,
                        (sender, handler) => sender.Updated += handler,
                        (sender, handler) => sender.Updated -= handler,
                        (listener, sender, eventArgs) => listener.Update());
            }
            else
            {
                // Reset legend title.
                ClearValue(TitleProperty);
            }

            Update();
        }
Example #4
0
        private void OnDataSourceChanged(IEnumerable dataSource)
        {
            // Unsubscribe from previous collection.
            if (_dataSourceSubscription != null)
            {
                _dataSourceSubscription.Dispose();
                _dataSourceSubscription = null;
            }

            // Subscribe to new collection using weak event pattern.
            var observableDataSource = dataSource as INotifyCollectionChanged;
            if (observableDataSource != null)
            {
                _dataSourceSubscription =
                    WeakEventHandler<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>.Register(
                        observableDataSource,
                        this,
                        handler => new NotifyCollectionChangedEventHandler(handler),
                        (sender, handler) => sender.CollectionChanged += handler,
                        (sender, handler) => sender.CollectionChanged -= handler,
                        (listener, sender, eventArgs) => listener.InvalidateDataSource());
            }

            InvalidateDataSource();
        }
 public void ShouldThrowIfListenerIsNull()
 {
     WeakEventHandler <EventArgs> .Register <WeakEventHandlerGenericTest, ListenerWithEventArgs>(
         this,
         null,
         (s, h) => s.Event += h,
         (s, h) => s.Event -= h,
         (l, s, e) => l.OnEvent(s, e));
 }
Example #6
0
 public void ShouldThrowIfListenerIsNull()
 {
     WeakEventHandler.Register <WeakEventHandlerTest, Listener>(
         this,
         null,
         (s, h) => s.Event += h,
         (s, h) => s.Event -= h,
         (l, s, e) => l.OnEvent(s, e));
 }
Example #7
0
 public void ShouldThrowIfListenerIsNull()
 {
     WeakEventHandler <PropertyChangedEventHandler, PropertyChangedEventArgs> .Register <WeakEventHandlerCustomTest, PropertyChangedListener>(
         this,
         null,
         handler => new PropertyChangedEventHandler(handler),
         (s, h) => s.PropertyChanged += h,
         (s, h) => s.PropertyChanged -= h,
         (l, s, e) => l.OnEvent(s, e));
 }
        public void ShouldThrowIfForwardEventIsNull()
        {
            var listener = new ListenerWithEventArgs();

            WeakEventHandler <EventArgs> .Register(
                this,
                listener,
                (s, h) => s.Event += h,
                (s, h) => s.Event -= h,
                null);
        }
Example #9
0
        public void ShouldThrowIfSenderIsNull()
        {
            var listener = new Listener();

            WeakEventHandler.Register <WeakEventHandlerTest, Listener>(
                null,
                listener,
                (s, h) => s.Event += h,
                (s, h) => s.Event -= h,
                (l, s, e) => l.OnEvent(s, e));
        }
        public void ShouldThrowIfRemoveHandlerIsNull()
        {
            var listener = new ListenerWithEventArgs();

            WeakEventHandler <EventArgs> .Register(
                this,
                listener,
                (s, h) => s.Event += h,
                null,
                (l, s, e) => l.OnEvent(s, e));
        }
Example #11
0
        public void ShouldThrowIfAddHandlerIsNull()
        {
            var listener = new Listener();

            WeakEventHandler.Register(
                this,
                listener,
                null,
                (s, h) => s.Event -= h,
                (l, s, e) => l.OnEvent(s, e));
        }
        public void ShouldThrowIfSenderIsNull()
        {
            var listener = new ListenerWithEventArgs();

            WeakEventHandler <EventArgs> .Register <WeakEventHandlerGenericTest, ListenerWithEventArgs>(
                null,
                listener,
                (s, h) => s.Event += h,
                (s, h) => s.Event -= h,
                (l, s, e) => l.OnEvent(s, e));
        }
Example #13
0
        public void ShouldThrowIfConversionNull()
        {
            var listener = new PropertyChangedListener();

            WeakEventHandler <PropertyChangedEventHandler, PropertyChangedEventArgs> .Register(
                this,
                listener,
                null,
                (s, h) => s.PropertyChanged += h,
                (s, h) => s.PropertyChanged -= h,
                (l, s, e) => l.OnEvent(s, e));
        }
Example #14
0
        public void ShouldThrowIfRemoveHandlerIsNull()
        {
            var listener = new PropertyChangedListener();

            WeakEventHandler <PropertyChangedEventHandler, PropertyChangedEventArgs> .Register(
                this,
                listener,
                handler => new PropertyChangedEventHandler(handler),
                (s, h) => s.PropertyChanged += h,
                null,
                (l, s, e) => l.OnEvent(s, e));
        }
Example #15
0
        public void ShouldThrowIfForwardEventIsNull()
        {
            var listener = new PropertyChangedListener();

            WeakEventHandler <PropertyChangedEventHandler, PropertyChangedEventArgs> .Register(
                this,
                listener,
                handler => new PropertyChangedEventHandler(handler),
                (s, h) => s.PropertyChanged += h,
                (s, h) => s.PropertyChanged -= h,
                null);
        }
        public void DetachEventHandler()
        {
            var listener     = new ListenerWithEventArgs();
            var subscription = WeakEventHandler <EventArgs> .Register(
                this,
                listener,
                (s, h) => s.Event += h,
                (s, h) => s.Event -= h,
                (l, s, e) => l.OnEvent(s, e));

            subscription.Dispose();
            RaiseEvent();
            Assert.IsFalse(listener.EventReceived);
        }
        public void HandleEvent()
        {
            var listener = new ListenerWithEventArgs();

            WeakEventHandler <EventArgs> .Register(
                this,
                listener,
                (s, h) => s.Event += h,
                (s, h) => s.Event -= h,
                (l, s, e) => l.OnEvent(s, e));

            RaiseEvent();
            Assert.IsTrue(listener.EventReceived);
        }
Example #18
0
        public void DetachEventHandler()
        {
            var listener     = new PropertyChangedListener();
            var subscription = WeakEventHandler <PropertyChangedEventHandler, PropertyChangedEventArgs> .Register(
                this,
                listener,
                handler => new PropertyChangedEventHandler(handler),
                (s, h) => s.PropertyChanged += h,
                (s, h) => s.PropertyChanged -= h,
                (l, s, e) => l.OnEvent(s, e));

            subscription.Dispose();
            RaiseEvent();
            Assert.IsFalse(listener.EventReceived);
        }
Example #19
0
        public void HandleEvent()
        {
            var listener = new PropertyChangedListener();

            WeakEventHandler <PropertyChangedEventHandler, PropertyChangedEventArgs> .Register(
                this,
                listener,
                handler => new PropertyChangedEventHandler(handler),
                (s, h) => s.PropertyChanged += h,
                (s, h) => s.PropertyChanged -= h,
                (l, s, e) => l.OnEvent(s, e));

            RaiseEvent();
            Assert.IsTrue(listener.EventReceived);
        }
Example #20
0
        //--------------------------------------------------------------
        #region Creation & Cleanup
        //--------------------------------------------------------------

        /// <summary>
        /// Initializes a new instance of the <see cref="ObservablePointListWrapper"/> class.
        /// </summary>
        /// <param name="list">The list of points that should be wrapped.</param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="list"/> is <see langword="null"/>.
        /// </exception>
        public ObservablePointListWrapper(IList <Point> list)
        {
            if (list == null)
            {
                throw new ArgumentNullException("list");
            }

            _list = list;

            var observableCollection = list as INotifyCollectionChanged;

            if (observableCollection != null)
            {
                WeakEventHandler <NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs> .Register(
                    observableCollection,
                    this,
                    handler => new NotifyCollectionChangedEventHandler(handler),
                    (sender, handler) => sender.CollectionChanged += handler,
                    (sender, handler) => sender.CollectionChanged -= handler,
                    (listener, sender, eventArgs) => listener.OnCollectionChanged(sender, eventArgs));
            }
        }
        private void WebLibraryDetailControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            drag_to_library_manager.DefaultLibrary = null;
            ObjTitleImage.Source = null;

            // Store the web library details
            web_library_detail = DataContext as WebLibraryDetail;
            if (null != web_library_detail)
            {
                // WEAK EVENT HANDLER FOR: web_library_detail.library.OnDocumentsChanged += library_OnDocumentsChanged;
                WeakEventHandler <Library.PDFDocumentEventArgs> .Register <Library, WebLibraryDetailControl>(
                    web_library_detail.library,
                    registerWeakEvent,
                    deregisterWeakEvent,
                    this,
                    forwardWeakEvent
                    );

                drag_to_library_manager.DefaultLibrary = web_library_detail.library;
            }

            UpdateLibraryStatistics();
        }
        public void EventHandlerShouldBeWeak()
        {
            bool eventReceived = false;
            var  listener      = new ListenerWithEventArgs();

            WeakEventHandler <EventArgs> .Register(
                this,
                listener,
                (s, h) => s.Event += h,
                (s, h) => s.Event -= h,
                (l, s, e) => { l.OnEvent(s, e); eventReceived = true; });

            RaiseEvent();
            Assert.IsTrue(listener.EventReceived);
            Assert.IsTrue(eventReceived);

            listener.Reset();
            eventReceived = false;
            listener      = null;
            GC.Collect();

            RaiseEvent();
            Assert.IsFalse(eventReceived);
        }
Example #23
0
        private void OnSelectedViewChanged(string value)
        {
            Logger.Debug(CultureInfo.InvariantCulture, "Switching to \"{0}\" in Output window.", SelectedView);

            _nlogSubscription?.Dispose();

            Output.Text = GetOrCreateBuffer(value).ToString();
            if (TextEditor != null)
            {
                TextEditor.TextArea.Caret.Offset = TextEditor.Document.TextLength;
                TextEditor.ScrollToEnd();
            }

            // Listen for NLog messages.
            if (_nlogTarget != null && value == NLogView)
            {
                _nlogSubscription = WeakEventHandler <NLogMessageEventArgs> .Register(
                    _nlogTarget,
                    this,
                    (sender, handler) => sender.MessageWritten += handler,
                    (sender, handler) => sender.MessageWritten -= handler,
                    (listener, sender, eventArgs) => WriteLine(eventArgs.Message, NLogView));
            }
        }