The WeakEventListener allows the owner to be garbage collected if its only remaining link is an event handler. See https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/weak-event-patterns for more information; the wisdom found on that page is applicable for other platforms inc UWP, Xamarin.Mac, Xamarin.iOS & Xamarin.Android.
- netstandard v1.1 (and up)
Installation is done via NuGet:
PM> Install-Package WeakEventListener
publicclassSampleClass{publiceventEventHandler<EventArgs>Raisevent;publicvoidDoSomething(){OnRaiseEvent();}protectedvirtualvoidOnRaiseEvent(){Raisevent?.Invoke(this,EventArgs.Empty);}}publicvoidTest_WeakEventListener_Events(){boolisOnEventTriggered=false;boolisOnDetachTriggered=false;SampleClasssample=newSampleClass();WeakEventListener<SampleClass,object,EventArgs>weak=newWeakEventListener<SampleClass,object,EventArgs>(sample);weak.OnEventAction=(instance,source,eventArgs)=>{isOnEventTriggered=true;};weak.OnDetachAction=(listener)=>{isOnDetachTriggered=true;};sample.Raisevent+=weak.OnEvent;sample.DoSomething();Assert.True(isOnEventTriggered);weak.Detach();Assert.True(isOnDetachTriggered);}- The WeakEventListener was promoted from the UWPCommunityToolkit to become this package.
