public override void Cleanup() { base.Cleanup(); WeakEventManager <InteraccionViewModel, PropertyChangingEventArgs> .RemoveHandler(this, "PropertyChanging", this_PropertyChanging); WeakEventManager <InteraccionViewModel, PropertyChangedEventArgs> .RemoveHandler(this, "PropertyChanged", this_PropertyChanged); }
/// <summary> /// 单一订阅 /// </summary> /// <param name="actionType"></param> /// <param name="handler"></param> /// <param name="useLatestPayload"></param> /// <returns></returns> public Unsubscibe Subscribe(Type actionType, EventHandler <YEventArgs> handler, bool useLatestPayload = true) { lock (locker) { if (!eventSource.ContainsKey(actionType)) { eventSource[actionType] = new YEventSource(); } var source = eventSource[actionType]; WeakEventManager <YEventSource, YEventArgs> .AddHandler(source, nameof(YEventSource.Event), handler); if (useLatestPayload && latestPayload?.GetType() == actionType) { handler?.Invoke(new YEventSource() { CallFrame = new StackTrace().GetFrame(0) }, new YEventArgs(latestPayload)); } } return(() => { lock (locker) { var source = eventSource[actionType]; WeakEventManager <YEventSource, YEventArgs> .RemoveHandler(source, nameof(YEventSource.Event), handler); } }); }
private void CloseDialog(object sender, RoutedEventArgs e) { WeakEventManager <INotifyPropertyChanged, PropertyChangedEventArgs> .RemoveHandler(TraceListener, "PropertyChanged", TraceListenerOnPropertyChanged); Close(); }
private static void ActivePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (!(d is TextBox)) { return; } var textBox = (TextBox)d; if ((e.NewValue as bool?).GetValueOrDefault(false)) { WeakEventManager <TextBox, KeyboardFocusChangedEventArgs> .AddHandler(textBox, "GotKeyboardFocus", OnKeyboardFocusSelectText); WeakEventManager <TextBox, MouseButtonEventArgs> .AddHandler(textBox, "PreviewMouseLeftButtonDown", OnMouseLeftButtonDown); } else { WeakEventManager <TextBox, KeyboardFocusChangedEventArgs> .RemoveHandler(textBox, "GotKeyboardFocus", OnKeyboardFocusSelectText); WeakEventManager <TextBox, MouseButtonEventArgs> .RemoveHandler(textBox, "PreviewMouseLeftButtonDown", OnMouseLeftButtonDown); } }
private void Window_Closed(object sender, EventArgs e) { _ViewModel.StopGameControllerTask(); WeakEventManager <MainViewModel, System.ComponentModel.PropertyChangedEventArgs> .RemoveHandler(_ViewModel, "PropertyChanged", _ViewModel_PropertyChanged); _ViewModel.SaveAndCloseAction = null; }
private static void AutoScrollPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args) { var scroller = obj as ScrollViewer; if (scroller == null || args.OldValue == args.NewValue) { return; } if (args.OldValue != null) { var coll = (INotifyCollectionChanged)args.OldValue; CollectionChangedEventManager.RemoveHandler(coll, AutoScrollSource_CollectionChanged); WeakEventManager <ScrollViewer, SizeChangedEventArgs> .RemoveHandler(scroller, "SizeChanged", ScrollViewer_SizeChanged); WeakPair pair = Get(coll, (p, _, __) => p); if (pair != null) { _pairs.Remove(pair); } } if (args.NewValue != null) { var coll = (INotifyCollectionChanged)args.NewValue; CollectionChangedEventManager.AddHandler(coll, AutoScrollSource_CollectionChanged); WeakEventManager <ScrollViewer, SizeChangedEventArgs> .AddHandler(scroller, "SizeChanged", ScrollViewer_SizeChanged); AddPair(coll, scroller); } }
/// <summary> /// 集合订阅 /// </summary> /// <param name="handlers"></param> /// <param name="useLatestPayload"></param> /// <returns></returns> public Unsubscibe Subscribe(IDictionary <Type, EventHandler <YEventArgs> > handlers, bool useLatestPayload = true) { lock (locker) { foreach (var pair in handlers) { var actionType = pair.Key; var handler = pair.Value; if (!eventSource.ContainsKey(actionType)) { eventSource[actionType] = new YEventSource(); } var source = eventSource[actionType]; WeakEventManager <YEventSource, YEventArgs> .AddHandler(source, nameof(YEventSource.Event), handler); if (useLatestPayload && latestPayload?.GetType() == actionType) { handler?.Invoke(this, new YEventArgs(latestPayload)); } } } return(() => { lock (locker) { foreach (var pair in handlers) { var source = eventSource[pair.Key]; WeakEventManager <YEventSource, YEventArgs> .RemoveHandler(source, nameof(YEventSource.Event), pair.Value); } } }); }
public override void Cleanup() { base.Cleanup(); WeakEventManager <CalendarViewModel, PropertyChangedEventArgs> .RemoveHandler(this, "PropertyChanged", this_PropertyChanged); MainViewModel.MainViewModelMsg.Unregister(this, handleMainViewModelMessage); }
private static void FeedbackProvider_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) { var self = (ManipulationBoundaryFeedbackAwareContentControl)d; var oldElement = (UIElement)e.OldValue; var newElement = (UIElement)e.NewValue; // The FeedbackProvider got changed. Remove old/add new handlers. if (oldElement != null) { WeakEventManager <UIElement, ManipulationBoundaryFeedbackEventArgs> .RemoveHandler( oldElement, nameof(ManipulationBoundaryFeedback), self.FeedbackProvider_ManipulationBoundaryFeedback); self.TraceVerbose("Removed FeedbackProvider {0}.", oldElement); } if (newElement != null) { WeakEventManager <UIElement, ManipulationBoundaryFeedbackEventArgs> .AddHandler( newElement, nameof(ManipulationBoundaryFeedback), self.FeedbackProvider_ManipulationBoundaryFeedback); self.TraceVerbose("Added FeedbackProvider {0}.", oldElement); } }
private static void HandlerProperty_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { TabControl tabControl = d as TabControl; if (tabControl == null) { return; } if (e.NewValue == null && e.OldValue != null) { WeakEventManager <TabControl, MouseButtonEventArgs> .RemoveHandler(tabControl, nameof(TabControl.PreviewMouseLeftButtonDown), TabTearOffBehavior.TabControl_PreviewMouseLeftButtonDown); if (!tabControl.IsLoaded) { tabControl.Loaded -= TabTearOffBehavior.TabControl_Loaded; } else { TabTearOffBehavior.SetWindowMaintainZIndex(tabControl, false); } } else if (e.NewValue != null && e.OldValue == null) { WeakEventManager <TabControl, MouseButtonEventArgs> .AddHandler(tabControl, nameof(TabControl.PreviewMouseLeftButtonDown), TabTearOffBehavior.TabControl_PreviewMouseLeftButtonDown); if (!tabControl.IsLoaded) { tabControl.Loaded += TabTearOffBehavior.TabControl_Loaded; } else { TabTearOffBehavior.SetWindowMaintainZIndex(tabControl, true); } } }
private static void mediaCollectionViewChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { MediaStateInfoView view = (MediaStateInfoView)d; if (e.OldValue != null) { MediaStateCollectionView oldState = (MediaStateCollectionView)e.OldValue; WeakEventManager <MediaViewer.Model.Media.Base.State.MediaState, PropertyChangedEventArgs> .RemoveHandler(oldState.MediaState, "PropertyChanged", view.mediaState_PropertyChanged); WeakEventManager <INotifyPropertyChanged, PropertyChangedEventArgs> .RemoveHandler(oldState.MediaState.UIMediaCollection, "PropertyChanged", view.uiMediaCollection_PropertyChanged); WeakEventManager <MediaStateCollectionView, EventArgs> .RemoveHandler(oldState, "SelectionChanged", view.selectionChanged); } if (e.NewValue != null) { MediaStateCollectionView newState = (MediaStateCollectionView)e.NewValue; WeakEventManager <MediaViewer.Model.Media.Base.State.MediaState, PropertyChangedEventArgs> .AddHandler(newState.MediaState, "PropertyChanged", view.mediaState_PropertyChanged); WeakEventManager <INotifyPropertyChanged, PropertyChangedEventArgs> .AddHandler(newState.MediaState.UIMediaCollection, "PropertyChanged", view.uiMediaCollection_PropertyChanged); WeakEventManager <MediaStateCollectionView, EventArgs> .AddHandler(newState, "SelectionChanged", view.selectionChanged); view.initialize(newState.MediaState); } }
private void OnItemsSourceChanged(IList oldValue, IList newValue) { ValidateData(); if (oldValue is INotifyCollectionChanged oldItemsSource) { WeakEventManager <INotifyCollectionChanged, NotifyCollectionChangedEventArgs> .RemoveHandler(oldItemsSource, "CollectionChanged", ItemsSource_CollectionChanged); } if (newValue != null) { if (newValue is INotifyCollectionChanged newItemsSource) { WeakEventManager <INotifyCollectionChanged, NotifyCollectionChangedEventArgs> .AddHandler(newItemsSource, "CollectionChanged", ItemsSource_CollectionChanged); } } Reset(); this.ScatterSeries?.UpdateItemsSource(); this.BarSeries?.UpdateItemsSource(); Refresh(); }
protected virtual void Dispose(bool disposing) { if (disposing) { WeakEventManager <INotifyPropertyChanged, PropertyChangedEventArgs> .RemoveHandler(_service, "PropertyChanged", ValueChanged); } }
static void Main(string[] args) { var dealer = new CarDealer(); var michael = new Consumer("老王"); //dealer.NewCarInfo += michael.NewCarIsHere; // WeakCarInfoEventManager.AddListener(dealer, michael); WeakEventManager <CarDealer, CarInfoEventArgs> .AddHandler(dealer, "NewCarInfo", michael.NewCarIsHere); dealer.NewCar("法拉利"); var sebastian = new Consumer("老张"); //dealer.NewCarInfo += sebastian.NewCarIsHere; //WeakCarInfoEventManager.AddListener(dealer, sebastian); WeakEventManager <CarDealer, CarInfoEventArgs> .AddHandler(dealer, "NewCarInfo", sebastian.NewCarIsHere); dealer.NewCar("奔驰"); //dealer.NewCarInfo -= michael.NewCarIsHere; //WeakCarInfoEventManager.RemoveListener(dealer, michael); WeakEventManager <CarDealer, CarInfoEventArgs> .RemoveHandler(dealer, "NewCarInfo", michael.NewCarIsHere); dealer.NewCar("奥迪"); Console.ReadKey(); }
public static void Main() { Cns.WriteLine("Chapter 08!"); Delegates.DemoDelegates(); LambdaExpressions.MidL(); Cns.WriteLine( $"{LambdaExpressions.StringToUpper("Test all goes to upper through one Parm Lambda function")}"); Cns.WriteLine($"{LambdaExpressions.twoToUpper("two Parm Lambda function ()")}"); LambdaExpressions.lambdaExamples(); SandPit.Test(); //Car Dealer and Delgate Events var dealer = new CarDealer(); //New customer var michelle = new Consumer("Michelle"); dealer.NewCarInfo += michelle.NewCarIsHere; dealer.NewCar("Lotus"); var christine = new Consumer("Chrissie"); dealer.NewCarInfo += christine.NewCarIsHere; dealer.NewCar("Mini"); dealer.NewCarInfo -= michelle.NewCarIsHere; dealer.NewCar("BMW 325i"); dealer.NewCarInfo -= christine.NewCarIsHere; System.GC.Collect(); //Just to stop the console disapearing... //Weak Class Listeners var wendy = new WeakConsumer("Wendy"); WeakCarInfoEM.AddListener(dealer, wendy); dealer.NewCar("Willie Wonker Wanger"); WeakCarInfoEM.RemoveListener(dealer, wendy); dealer.NewCar("Nothing Today"); System.GC.Collect(); //Generic WeakEvent var gCus = new Consumer("Gena"); WeakEventManager <CarDealer, CarInfoEventsArgs> .AddHandler(dealer, "NewCarInfo", gCus.NewCarIsHere); dealer.NewCar("Genevieve"); WeakEventManager <CarDealer, CarInfoEventsArgs> .RemoveHandler(dealer, "NewCarInfo", gCus.NewCarIsHere); dealer.NewCar("Renault"); Cns.ReadKey(); }
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { BindingOperations.ClearBinding(Icon, CrispImage.MonikerProperty); if (e.OldValue != null) { WeakEventManager <CmdBase, CmdBase.EditModeChangedEventArgs> .RemoveHandler((CmdBase)e.OldValue, nameof(CmdBase.EditModeChanged), OnItemEditModeChanged); } if (e.NewValue != null) { WeakEventManager <CmdBase, CmdBase.EditModeChangedEventArgs> .AddHandler((CmdBase)e.NewValue, nameof(CmdBase.EditModeChanged), OnItemEditModeChanged); if (e.NewValue is CmdContainer con) { MultiBinding bind = new MultiBinding { Mode = BindingMode.OneWay, Converter = new ItemMonikerConverter() }; bind.Bindings.Add(new Binding { Source = con }); bind.Bindings.Add(new Binding { Source = con, Path = new PropertyPath(nameof(CmdContainer.IsExpanded)) }); Icon.SetBinding(CrispImage.MonikerProperty, bind); } } }
private void OnRequestClose(object sender, RequestCloseEventArgs e) { DialogResult = e.DialogResult; Close(); WeakEventManager <IDialogViewModel, RequestCloseEventArgs> .RemoveHandler(DataContext as IDialogViewModel, "RequestClose", OnRequestClose); }
private static void RemoveInstanceEventHandler <T, U>(string eventName, T eventSource, EventHandler <U> handler) where U : EventArgs { WeakEventManager <T, U> .RemoveHandler( eventSource, eventName, handler); }
static void Main(string[] args) { //通过事件,直接连接到发布程序和侦听器。但垃圾回收有一个问题。例如,如果侦听器不再直接引用,发布程序就仍有一个引用。垃圾回收器不能清空侦听器占用的内存,因为发布程序仍保有一个引用,会针对侦听器触发事件。 //使用弱事件侦听器;为了避免出现资源泄露 var dealer = new CarDealer(); var michael = new Consumer("Michael"); WeakEventManager <CarDealer, CarInfoEventArgs> .AddHandler(dealer, "NewCarInfo", michael.NewCarIsHere); dealer.NewCar("Mercedes"); var sebastian = new Consumer("Sebastian"); WeakEventManager <CarDealer, CarInfoEventArgs> .AddHandler(dealer, "NewCarInfo", sebastian.NewCarIsHere); dealer.NewCar("Ferrari"); WeakEventManager <CarDealer, CarInfoEventArgs> .RemoveHandler(dealer, "NewCarInfo", michael.NewCarIsHere); dealer.NewCar("Red Bull Racing"); Console.ReadKey(); }
public override void Cleanup() { base.Cleanup(); WeakEventManager <MainViewModel, PropertyChangedEventArgs> .RemoveHandler(this, "PropertyChanged", this_PropertyChanged); InteraccionViewModel.frmInteraccionViewModelMsg.Unregister(this, handlefrmInteraccionViewModelMessage); }
private void dettachEvents() { if (_monthAppointments == null) { return; } WeakEventManager <ObservableCollection <Appointment>, NotifyCollectionChangedEventArgs> .RemoveHandler(_monthAppointments, "CollectionChanged", parentCollection_CollectionChanged); }
public void Dispose() { foreach (var source in _sources) { WeakEventManager <INotifyPropertyChanged, PropertyChangedEventArgs> .RemoveHandler(source, nameof(INotifyPropertyChanged.PropertyChanged), SourceWrapper_PropertyChanged); } }
void RootVisual_Loaded(object sender, RoutedEventArgs e) { // Detach the event WeakEventManager <Window, RoutedEventArgs> .RemoveHandler(App.RootVisual, "Loaded", RootVisual_Loaded); // close loading window _loadingView.Close(); }
private void dettachEvents() { WeakEventManager <SUPSyncListener, EventArgs> .RemoveHandler(SyncListener, "SyncStarted", SyncListener_SyncStarted); WeakEventManager <SUPSyncListener, EventArgs> .RemoveHandler(SyncListener, "SyncCanceled", SyncListener_SyncCanceled); WeakEventManager <SUPSyncListener, EventArgs> .RemoveHandler(SyncListener, "SyncFinished", SyncListener_SyncFinished); }
public void Dispose() { if (_element != null) { WeakEventManager<FrameworkElement, MouseEventArgs>.RemoveHandler(_element, "MouseEnter", MouseEnter); WeakEventManager<FrameworkElement, MouseEventArgs>.RemoveHandler(_element, "MouseLeave", MouseLeave); } }
private void Popup_Closed(object sender, EventArgs e) { var win = Window.GetWindow(this); if (win != null) { WeakEventManager <Window, MouseButtonEventArgs> .RemoveHandler(win, nameof( MouseDown ), OnWindowMouseDown); } }
private void Unload() { if (!_loaded) { return; } WeakEventManager <IBaseAcObjectObservableCollection, EventArgs> .RemoveHandler(WeatherManager.Instance.WrappersList, nameof(IBaseAcObjectObservableCollection.CollectionReady), OnWeatherListUpdated); }
public static void UnsubscribeWeak([CanBeNull] this INotifyPropertyChanged obj, [CanBeNull] EventHandler <PropertyChangedEventArgs> onPropertyChanged) { if (obj == null || onPropertyChanged == null) { return; } WeakEventManager <INotifyPropertyChanged, PropertyChangedEventArgs> .RemoveHandler(obj, nameof(INotifyPropertyChanged.PropertyChanged), onPropertyChanged); }
public void Dispose() { if (_notify == null) { return; } WeakEventManager <INotifyCollectionChanged, NotifyCollectionChangedEventArgs> .RemoveHandler(_notify, nameof(_notify.CollectionChanged), OnItemsSourceCollectionChanged); }
public void Dispose() { WeakEventManager <AcItemWrapper, WrappedValueChangedEventArgs> .RemoveHandler(_wrapper, nameof(AcItemWrapper.ValueChanged), Wrapper_ValueChanged); if (_wrapper.IsLoaded) { WeakEventManager <INotifyPropertyChanged, PropertyChangedEventArgs> .AddHandler(_wrapper.Value, nameof(INotifyPropertyChanged.PropertyChanged), Value_PropertyChanged); } }
public void RemoveHandlerShouldRemoveAddedHandler() { var target = new WeakEventManager<EventHandler, EventArgs>(); EventHandler handler = DefaultAction.None; target.AddHandler( handler ); Assert.True( target.RemoveHandler( handler ) ); }
public void RemoveHandlerShouldNotRemoveUnaddedHandler() { var target = new WeakEventManager<EventHandler, EventArgs>(); EventHandler handler1 = ( s, e ) => { }; EventHandler handler2 = ( s, e ) => { }; target.AddHandler( handler1 ); Assert.False( target.RemoveHandler( handler2 ) ); }