15.02.2015 Views

C# 4 and .NET 4

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

204 ❘ ChaPTer 8 deleGAtes, lAmbdAs, And events<br />

}<br />

}<br />

WeakCarInfoEventManager manager =<br />

GetCurrentManager(typeof(WeakCarInfoEventManager))<br />

as WeakCarInfoEventManager;<br />

if (manager == null)<br />

{<br />

manager = new WeakCarInfoEventManager();<br />

SetCurrentManager(typeof(WeakCarInfoEventManager), manager);<br />

}<br />

return manager;<br />

}<br />

}<br />

protected override void StartListening(object source)<br />

{<br />

(source as CarDealer).NewCarInfo += CarDealer_NewCarInfo;<br />

}<br />

void CarDealer_NewCarInfo(object sender, CarInfoEventArgs e)<br />

{<br />

DeliverEvent(sender, e);<br />

}<br />

protected override void StopListening(object source)<br />

{<br />

(source as CarDealer).NewCarInfo = CarDealer_NewCarInfo;<br />

}<br />

code snippet WeakEventsSample/WeakCarInfoEventManager.cs<br />

WPF makes use of the weak event pattern with the event manager classes<br />

CollectionChangedEventManager , CurrentChangedEventManager ,<br />

CurrentChangingEventManager , PropertyChangedEventManager ,<br />

DataChangedEventManager , <strong>and</strong> LostFocusEventManager .<br />

With the publisher class CarDealer there ’ s no need to change anything. It has the same implementation<br />

as before.<br />

event listener<br />

The listener needs to be changed to implement the interface IWeakEventListener . This interface defi nes<br />

the method ReceiveWeakEvent() that is called from the weak event manager when the event arrives.<br />

In the method implementation the method that should be invoked from the event is invoked, which is<br />

NewCarIsHere() .<br />

using System;<br />

using System.Windows;<br />

namespace Wrox.ProCSharp.Delegates<br />

{<br />

public class Consumer : IWeakEventListener<br />

{<br />

private string name;<br />

public Consumer(string name)<br />

{<br />

this.name = name;<br />

}<br />

www.it-ebooks.info

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!