In WPF abbiamo eventi instradati. Quando dovrebbero essere usati al posto di eventi regolari?WPF: eventi instradati o eventi regolari?
risposta
Gli eventi instradati hanno un comportamento speciale, ma tale comportamento è in gran parte invisibile se si gestisce un evento sull'elemento in cui è stato generato.
Dove gli eventi indirizzati diventano potenti è se si utilizza uno degli scenari suggeriti: definizione di gestori comuni su una radice comune, composizione del proprio controllo o definizione della propria classe di controllo personalizzata.
I listener di eventi instradati e le origini di eventi instradati non devono condividere un evento comune nella loro gerarchia. Qualsiasi UIElement o ContentElement può essere un listener di eventi per qualsiasi evento indirizzato. Pertanto, è possibile utilizzare l'intera serie di eventi instradati disponibili in tutto l'insieme di API di lavoro come "interfaccia" concettuale in base alla quale elementi disparati nell'applicazione possono scambiarsi informazioni sugli eventi. Questo concetto di "interfaccia" per eventi indirizzati è particolarmente applicabile per gli eventi di input.
Gli eventi indirizzati possono anche essere utilizzati per comunicare attraverso l'albero degli elementi, poiché i dati degli eventi per l'evento vengono perpetuati su ciascun elemento della rotta. Un elemento potrebbe modificare qualcosa nei dati dell'evento e tale modifica sarebbe disponibile per l'elemento successivo nella rotta.
Oltre all'aspetto di instradamento, esistono altri due motivi per cui un determinato evento WPF potrebbe essere implementato come evento indirizzato anziché un evento CLR standard. Se si implementa i propri eventi, si potrebbe anche prendere in considerazione questi principi:
- Alcune funzionalità di stili e modelli di WPF, come EventSetter e EventTrigger richiedono l'evento di riferimento per essere un evento indirizzato. Questo è lo scenario dell'identificatore di eventi menzionato in precedenza.
- Gli eventi instradati supportano un meccanismo di gestione classi in base al quale la classe può specificare metodi statici che hanno l'opportunità di gestire gli eventi indirizzati prima che qualsiasi gestore di istanze registrato possa accedervi. Questo è molto utile nella progettazione del controllo, perché la classe può imporre comportamenti di classe basati sugli eventi che non possono essere accidentalmente soppressi gestendo un evento su un'istanza.
Fonte: MSDN: Routed Events Overview
In composizione di controllo WPF è molto utilizzato. che impone di utilizzare l'evento indirizzato, poiché la composizione dell'insieme di controlli espone la singola attività per la maggior parte del tempo.
- 1. Come ottenere un elenco di eventi instradati integrati in WPF
- 2. Eventi instradati personalizzati WPF - Come annullare la sottoscrizione?
- 3. Debug di eventi WPF, associazioni
- 4. WPF: Canvas eventi non funziona
- 5. WPF e MVVM. Binding Eventi
- 6. WPF - Eventi su un ControlTemplate?
- 7. Gestione degli eventi del controllo utente WPF
- 8. Comandi di chiamata WPF tramite eventi
- 9. Associazione eventi WPF da View a ViewModel?
- 10. gestore di eventi wpf binding in stile
- 11. Eventi Jquery .bind attivati durante l'acquisizione di eventi o il fumetto di eventi
- 12. WPF - Gestione degli eventi collegati personalizzato su controlli personalizzati
- 13. Utilizzo di Jquery per consentire eventi su oggetti JS regolari
- 14. Eventi deboli in .NET?
- 15. Gestore eventi in DataTemplate
- 16. Eventi collegati Eventi continui di VSTO su thread principale
- 17. Come chiudere eventi eventi server-inviati
- 18. Eventi Java e listener di eventi
- 19. Gli eventi vengono generati, attivati o attivati?
- 20. Rimuovere gli eventi con jQuery o javascript
- 21. Eventi/delegati in Java o C#
- 22. Throttle un gestore eventi
- 23. WPF - Disegno su tela con eventi del mouse
- 24. WPF - Gestione degli eventi dal controllo utente in Visualizza modello
- 25. eventi Backbone
- 26. Eventi UISlider
- 27. UiTextField eventi
- 28. WPF: come rilevare la ripetizione della chiave, in eventi chiave *?
- 29. Manipolazione eventi non attivati
- 30. Che cosa sono gli eventi di anteprima WPF?
Jahedbozorgan: grazie per la tua risposta molto completa. Ho notato che hai citato una fonte nella risposta. Ma mi stavo chiedendo se ci fossero altri libri che parlano di RoutedEvents in dettaglio. Se ne hai mai trovati, per favore condividili anche tu. – gprasant