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); }
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(); }
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)); }
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)); }
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); }
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)); }
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)); }
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)); }
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)); }
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); }
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); }
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); }
//-------------------------------------------------------------- #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); }
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)); } }