|
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
|
Traduzione
Originale
|
Modelli di eventi deboli
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
-
il nome di evento è SomeEvent. -
L'evento viene generato da EventSource classe. -
Il gestore eventi il tipo: SomeEventEventHandler o EventHandler<SomeEventEventArgs>). -
l'evento passa un parametro di tipo SomeEventEventArgs i gestori eventi.
Utilizzando una classe debole esistente del gestore degli eventi
-
Trovare un gestore di evento debole esistente. Per un elenco di gestori degli eventi deboli inclusi in WPF, vedere la gerarchia di ereditarietà in WeakEventManager classe. -
Utilizzare il nuovo gestore di evento debole anziché collegamento normale dell'evento. Ad esempio, se il codice utilizza il modello seguente per sottoscrivere un evento: source.SomeEvent += new SomeEventEventHandler(OnSomeEvent);
Modificare il seguente modello: SomeEventWeakEventManager.AddHandler(source, OnSomeEvent);
Analogamente, se il codice utilizza il modello seguente per annullare la sottoscrizione a un evento: source.SomeEvent -= new SomeEventEventHandler(OnSome);
Modificare il seguente modello: SomeEventWeakEventManager.RemoveHandler(source, OnSomeEvent);
Utilizzando la classe debole generica del gestore degli eventi
-
Utilizzare l'oggetto generico WeakEventManager<TEventSource, TEventArgs> classe anziché collegamento normale dell'evento. Quando si utilizzano WeakEventManager<TEventSource, TEventArgs> per registrare listener di eventi, fornire origine eventi e EventArgs tipo come parametri di tipo alla classe e alla chiamata AddHandler come illustrato nel codice seguente: WeakEventManager<EventSource, SomeEventEventArgs>.AddHandler(source, "SomeEvent", source_SomeEvent);
Creare una classe debole personalizzata del gestore degli eventi
-
Copiare il seguente modello di classe al progetto. Questa classe eredita dalla classe WeakEventManager. class SomeEventWeakEventManager : WeakEventManager { private SomeEventWeakEventManager() { } /// <summary> /// Add a handler for the given source's event. /// </summary> public static void AddHandler(EventSource source, EventHandler<SomeEventEventArgs> handler) { if (source == null) throw new ArgumentNullException("source"); if (handler == null) throw new ArgumentNullException("handler"); CurrentManager.ProtectedAddHandler(source, handler); } /// <summary> /// Remove a handler for the given source's event. /// </summary> public static void RemoveHandler(EventSource source, EventHandler<SomeEventEventArgs> handler) { if (source == null) throw new ArgumentNullException("source"); if (handler == null) throw new ArgumentNullException("handler"); CurrentManager.ProtectedRemoveHandler(source, handler); } /// <summary> /// Get the event manager for the current thread. /// </summary> private static SomeEventWeakEventManager CurrentManager { get { Type managerType = typeof(SomeEventWeakEventManager); SomeEventWeakEventManager manager = (SomeEventWeakEventManager)GetCurrentManager(managerType); // at first use, create and register a new manager if (manager == null) { manager = new SomeEventWeakEventManager(); SetCurrentManager(managerType, manager); } return manager; } } /// <summary> /// Return a new list to hold listeners to the event. /// </summary> protected override ListenerList NewListenerList() { return new ListenerList<SomeEventEventArgs>(); } /// <summary> /// Listen to the given source for the event. /// </summary> protected override void StartListening(object source) { EventSource typedSource = (EventSource)source; typedSource.SomeEvent += new EventHandler<SomeEventEventArgs>(OnSomeEvent); } /// <summary> /// Stop listening to the given source for the event. /// </summary> protected override void StopListening(object source) { EventSource typedSource = (EventSource)source; typedSource.SomeEvent -= new EventHandler<SomeEventEventArgs>(OnSomeEvent); } /// <summary> /// Event handler for the SomeEvent event. /// </summary> void OnSomeEvent(object sender, SomeEventEventArgs e) { DeliverEvent(sender, e); } }
-
Sostituire SomeEventWeakEventManager nome con un nome. -
Sostituire i tre nomi descritti in precedenza con i nomi corrispondenti per l'evento. (SomeEvent, EventSourcee SomeEventEventArgs) -
Per impostare la visibilità (pubblica/interna/privata) della classe debole del gestore degli eventi alla stessa visibilità di gestisce l'evento. -
Utilizzare il nuovo gestore di evento debole anziché collegamento normale dell'evento. Ad esempio, se il codice utilizza il modello seguente per sottoscrivere un evento: source.SomeEvent += new SomeEventEventHandler(OnSomeEvent);
Modificare il seguente modello: SomeEventWeakEventManager.AddHandler(source, OnSomeEvent);
Analogamente, se il codice utilizza il modello seguente per annullare la sottoscrizione a un evento: source.SomeEvent -= new SomeEventEventHandler(OnSome);
Modificare il seguente modello: SomeEventWeakEventManager.RemoveHandler(source, OnSomeEvent);