/// <summary> /// Creates a weak delegate from an Action delegate. /// </summary> public static PropertyChangedEventHandler From(PropertyChangedEventHandler strongHandler) { AssertIsWeakDelegate(strongHandler); var wrapper = new WeakPropertyChangedEventHandler(strongHandler); return(wrapper.Execute); }
public void FirePropertyChangedEvent_Always_CallsCallback() { EventListenerStub listener = new EventListenerStub(); Person person = new Person(); WeakEventHandler weakEventHandler = WeakPropertyChangedEventHandler.Register( person, (s, eh) => s.PropertyChanged -= eh, listener, (me, sender, ea) => me.OnPropertyChanged(sender, ea)); person.Name = "Bob"; Assert.AreEqual(1, listener.EventHandlerCallCount); Assert.AreEqual("Name", listener.LastPropertyChanged); }
public void Register_ListenerSetToNullAndGarbageCollected_ListenerSetToNull() { EventListenerStub listener = new EventListenerStub(); WeakReference listenerRef = new WeakReference(listener); Person person = new Person(); WeakEventHandler weakEventHandler = WeakPropertyChangedEventHandler.Register( person, (s, eh) => s.PropertyChanged -= eh, listener, (me, sender, ea) => me.OnPropertyChanged(sender, ea)); listener = null; GC.Collect(); Assert.IsFalse(listenerRef.IsAlive); }