Ich habe mehrere Ebenen in einer Anwendung und ich finde, dass ich Ereignisse auf der GUI - Ebene platzen lassen muss, um Änderungen an der Statusleiste usw. . Ich finde, dass ich wiederholt codierte schreiben muss, wobei jede Schicht einfach Ereignisse von der unteren Schicht abonniert und dann im Rückruf einfach ein Ereignis in der Kette anhebt. Gibt es einen effizienteren Weg, dies zu tun?Sprudelnde Ereignisse.
Antwort
Wenn Sie nur einen Event-Handler von einem anderen Event-Handler auslösen, können Sie den mittleren Mann ausschneiden und die Event-Handler direkt in den add/remove-Blöcken für das Event haken.
Zum Beispiel, wenn Sie ein Benutzersteuerelement mit einem „SaveButtonClick“ Ereignis, und alle wollen Sie wann zu tun ist, um die Event-Handler aufrufen, wenn die „Savebutton“ auf Ihrem Usercontrol geklickt wird, können Sie dies tun:
public event EventHandler SaveButtonClick
{
add { this.SaveButton.Click += value; }
remove { this.SaveButton.Click -= value; }
}
Jetzt benötigen Sie keinen Code zum Auslösen des SaveButtonClick-Ereignisses - es wird automatisch ausgelöst, wenn das SaveButton.Click-Ereignis ausgelöst wird (dh wenn jemand auf diese Schaltfläche klickt).
Sie können einen zentralen Kanal verwenden, der nur Ereignisse unterstützt. Dieser Kanal muss unabhängig sein, sodass die Ebene nur veröffentlicht oder abonniert wird.
Das klingt interessant, aber die Erklärung ist sehr vage. Kannst du ein paar Beispiele geben? – spoulson
Es sei denn, ich sehe ein bisschen mehr vom Design .. es wird schwer sein, eine gute Antwort zu geben.
WPF führt Bubble-Ereignisse (automatisch) die UI-Komponente/Control-Struktur ... Dies wurde jetzt in das Framework eingebaut. Also ich denke, das ist die empfohlene Methode :)
Das Problem mit der Umgehung des mittleren Mannes Layer2 ist, dass Layer1 und Layer3 jetzt einander kennen ... sind gekoppelt. Es ist also ein Kompromiss. Wenn Sie mit der Kopplung in Ordnung sind .. eliminieren Sie den mittleren Mann/erfinden Sie eine spezialisierte Komponente mit dieser Verantwortung. Wenn Sie jedoch erwarten, dass Layer 3 Hot-Swap-fähig ist (niedrige Kopplung), würde ich sagen, dass Sie weiter blubbern.
Werfen Sie einen Blick auf Update Controls .NET. Diese Steuerelemente ermitteln die Teile Ihres Datenmodells, von denen sie selbst durch Schichten der Geschäftslogik abhängen. Sie müssen keinen Code schreiben, um sie zu benachrichtigen.
Lesen Sie sich Jeremy Millers Blog "The Shade Tree Developer" durch, vor allem seine Write Your Own CAB series - das Befehlsmuster, über das er spricht, ist wahrscheinlich das, was Sie brauchen.
Peter Rilling hat eine Möglichkeit zur Simulation von Event Bubbling/Broadcasting in Winforms gepostet. Es ist einfach und effektiv.
- 1. Sprudelnde KomponenteWillUpdate und KomponenteDidUpdate
- 2. Event sprudelnde Seltsamkeit
- 3. So schließen Sie Server-Gesendete Ereignisse Ereignisse
- 4. WPF: Geführte Ereignisse oder regelmäßige Ereignisse?
- 5. Uibutton Ereignisse
- 6. Serialisierung Ereignisse
- 7. FullCalendar zeigt Ereignisse der letzten Woche unter diesen Wochen Ereignisse
- 8. String Ereignisse vs Klassen Ereignisse in L5.2, was ist besser?
- 9. Google-Kalender - Es werden wiederkehrende Ereignisse wie normale Ereignisse angezeigt.
- 10. Zugriff auf Ereignisse im Kalender "Ereignisse gefunden in Mail"
- 11. Google Analytics - Verhalten -> Ereignisse zeigen keine Ereignisse insgesamt
- 12. Spring Framework-Ereignisse
- 13. C++ Konsolentastatur Ereignisse
- 14. Gridview-Server-Ereignisse
- 15. Ereignisse sequenziell in jQuery
- 16. HTML-Dateieingabe JS-Ereignisse
- 17. Schwache Ereignisse in .NET?
- 18. iPhone Einmalige Ereignisse Programmierung
- 19. Delegierte und Ereignisse
- 20. Wie TDD asynchrone Ereignisse?
- 21. ASP.NET Masterpage Ereignisse
- 22. onClick Ereignisse document.createElement („th“)
- 23. Ereignisse mit PowerShell behandeln?
- 24. Javascript-Protokoll und Ereignisse
- 25. Frage über benutzerdefinierte Ereignisse
- 26. Ereignisse asynchron auslösen
- 27. Jquery Ereignisse hinzufügen
- 28. -Code-Optimierung - mehrere Ereignisse
- 29. Meteor Ereignisse nicht feuern
- 30. Ereignisse für benutzerdefinierte UIView
Das klingt interessant. Würde mich freuen, die Umsetzung zu sehen. –
@Maxim - der Code, den ich dort gepostet habe * ist * die Implementierung. Wenn Sie ein UserControl mit einer Schaltfläche namens SaveButton haben und diese UC in ein Formular einfügen, können Sie SaveButtonClick über das Formular abonnieren. Wenn Sie auf die Schaltfläche klicken, wird Ihr Event-Handler aufgerufen. –
Ich mag die Idee und einfache Implementierung. aber ich mag nicht die Abhängigkeit, die Sie zwischen dem usercontrol und dem Teilnehmer erstellen –