public void WeakEventTest() { var listener1Success = false; var eventPublisher = new TestEventPublisher(); var listener1 = new LivetWeakEventListener <EventHandler, EventArgs>( h => new EventHandler(h), h => eventPublisher.EmptyEvent += h, h => eventPublisher.EmptyEvent -= h, (sender, e) => listener1Success = true); var listenerWeakReference = new WeakReference(listener1); //------------------ listener1Success.Is(false); eventPublisher.RaiseEmptyEvent(); listener1Success.Is(true); //------------------ listener1Success = false; listener1 = null; GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); eventPublisher.RaiseEmptyEvent(); listener1Success.Is(false); }
public void LifeCycleTest() { var listener1Success = false; var eventPublisher = new TestEventPublisher(); var listener1 = new LivetWeakEventListener <EventHandler, EventArgs>( h => new EventHandler(h), h => eventPublisher.EmptyEvent += h, h => eventPublisher.EmptyEvent -= h, (sender, e) => listener1Success = true); //------------------ listener1Success.Is(false); eventPublisher.RaiseEmptyEvent(); listener1Success.Is(true); //------------------ listener1Success = false; listener1.Dispose(); eventPublisher.RaiseEmptyEvent(); listener1Success.Is(false); }
public void WeakEventTest() { var listener1Success = false; var eventPublisher = new TestEventPublisher(); var listener1 = new LivetWeakEventListener<EventHandler, EventArgs>( h => new EventHandler(h), h => eventPublisher.EmptyEvent += h, h => eventPublisher.EmptyEvent -= h, (sender, e) => listener1Success = true); var listenerWeakReference = new WeakReference(listener1); //------------------ listener1Success.Is(false); eventPublisher.RaiseEmptyEvent(); listener1Success.Is(true); //------------------ listener1Success = false; listener1 = null; GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); eventPublisher.RaiseEmptyEvent(); listener1Success.Is(false); }
public void LifeCycleTest() { var listener1Success = false; var eventPublisher = new TestEventPublisher(); var listener1 = new LivetWeakEventListener<EventHandler, EventArgs>( h => new EventHandler(h), h => eventPublisher.EmptyEvent += h, h => eventPublisher.EmptyEvent -= h, (sender, e) => listener1Success = true); //------------------ listener1Success.Is(false); eventPublisher.RaiseEmptyEvent(); listener1Success.Is(true); //------------------ listener1Success = false; listener1.Dispose(); eventPublisher.RaiseEmptyEvent(); listener1Success.Is(false); }
LivetWeakEventListener<KeyEventHandler, KeyEventArgs> _listener; //strong reference of listener #endregion Fields #region Constructors public ReceiverTextBoxKeyDown(TextBox t, ICommand command) { _listener = new LivetWeakEventListener<KeyEventHandler, KeyEventArgs>( h => new KeyEventHandler(h), h => t.KeyDown += h, h => t.KeyDown -= h, OnKeyDownEvent); this._command = command; }
public MessageListener(InteractionMessenger messenger) { Dispatcher = Dispatcher.CurrentDispatcher; _source = new WeakReference <InteractionMessenger>(messenger); _listener = new LivetWeakEventListener <EventHandler <InteractionMessageRaisedEventArgs>, InteractionMessageRaisedEventArgs> ( h => h, h => messenger.Raised += h, h => messenger.Raised -= h, MessageReceived ); }
public MessageListener([NotNull] InteractionMessenger messenger) { if (messenger == null) { throw new ArgumentNullException(nameof(messenger)); } _dispatcher = Dispatcher.CurrentDispatcher; _source = new WeakReference <InteractionMessenger>(messenger); _listener = new LivetWeakEventListener <EventHandler <InteractionMessageRaisedEventArgs>, InteractionMessageRaisedEventArgs> ( h => h, h => messenger.Raised += h, h => messenger.Raised -= h, MessageReceived ); }
/// <summary> /// 渡された View を元に、DataContext(=ViewModel), Messenger を取得して、イベント購読して、メッセージキーに応じた各処理をおこないます。 /// </summary> /// <param name="view">Window</param> private static void AutoReceiveOperationChangedInternal(DependencyObject view) { if (!(view is Window)) { return; } var window = view as Window; if (_WindowCache == null) { _WindowCache = new Dictionary <string, LivetWeakEventListener <DependencyPropertyChangedEventHandler, DependencyPropertyChangedEventArgs> >(); } // DataContext が null の場合処理を抜けてしまうので、抜ける前に変更監視と再開処理を残しておく // View 単位で確保しておく var keyName = window.GetType().FullName; if (!_WindowCache.ContainsKey(keyName)) { var listener = new LivetWeakEventListener <DependencyPropertyChangedEventHandler, DependencyPropertyChangedEventArgs>( h => new DependencyPropertyChangedEventHandler(h), h => window.DataContextChanged += h, h => window.DataContextChanged -= h, (s, e) => AutoReceiveOperationChangedInternal(s as DependencyObject)); _WindowCache.Add(keyName, listener); } if (window.DataContext == null) { return; } var dataContext = window.DataContext; if (!(dataContext is ViewModel)) { return; } var vm = dataContext as ViewModel; var messenger = vm.Messenger; if (_MessengerCache == null) { _MessengerCache = new Dictionary <string, LivetWeakEventListener <EventHandler <InteractionMessageRaisedEventArgs>, InteractionMessageRaisedEventArgs> >(); } // ViewModel 単位で確保しておく keyName = $"{vm.GetType().FullName}.{messenger.GetType().Name}"; if (!_MessengerCache.ContainsKey(keyName)) { var listener = new LivetWeakEventListener <EventHandler <InteractionMessageRaisedEventArgs>, InteractionMessageRaisedEventArgs>( h => new EventHandler <InteractionMessageRaisedEventArgs>(h), h => messenger.Raised += h, h => messenger.Raised -= h, (s, e) => Messenger_Raised(window, s, e)); _MessengerCache.Add(keyName, listener); } }