我在應用程序中有多個圖層,並且我發現自己不得不將事件吹到GUI層以進行狀態欄更改等。 。我發現自己必須重複編寫代碼,其中每一層只需訂閱來自較低層的事件,然後在回調中簡單地向事件鏈上報事件。有沒有更有效的方法來做到這一點?冒泡事件。
冒泡事件。
回答
如果你正在做的是從另一個事件處理程序中觸發一個事件處理程序,那麼可以裁剪掉中間人並直接在事件的add/remove塊中掛接事件處理程序。
例如,如果你有一個「SaveButtonClick」事件用戶控件,以及所有你想做的事時,就是調用事件處理程序上點擊你的用戶控件的「SaveButton」的時候,你可以這樣做:
public event EventHandler SaveButtonClick
{
add { this.SaveButton.Click += value; }
remove { this.SaveButton.Click -= value; }
}
現在,您不需要任何代碼來觸發SaveButtonClick事件 - 當SaveButton.Click事件被引發時(即當有人單擊該按鈕時)它將自動被觸發。
您可以擁有僅支持事件的中央通道。該頻道必須是獨立的,因此該圖層只能發佈或訂閱該頻道。
這聽起來很有趣,但解釋很模糊。你能舉一些例子嗎? – spoulson 2008-10-20 01:43:36
除非我看到更多的設計..它會很難給出一個很好的答案。
WPF確實(自動)將UI組件/控件樹冒泡起來......現在已經內置到框架中了。所以我想這是推薦的方式:)
繞過中間人Layer2的麻煩在於Layer1和Layer3現在彼此認識...耦合。所以它是一個權衡..如果你對聯軸器沒問題..消除中間人/發明一個專門的組件與這個責任。但是,如果你期望第3層是熱插拔(低耦合),我會說繼續冒泡。
看看Update Controls .NET。這些控件甚至通過業務邏輯層來發現他們依賴的數據模型的各個部分。您不必編寫任何代碼來通知他們。
閱讀Jeremy Miller的博客「The Shade Tree Developer」,特別是他的Write Your Own CAB series - 他談論的命令模式可能是你需要的東西。
Peter Rilling發佈了一種在winforms中模擬Event Bubbling/Broadcasting的方法。 它簡單而有效。
- 1. 事件不冒泡
- 2. Winforms冒泡事件
- 3. JavaScript事件冒泡
- 4. jquery datepicker冒泡的事件
- 5. jQuery的事件冒泡
- 6. 事件冒泡奇怪
- 7. jQuery和事件冒泡... AGAIN
- 8. Jquery冒泡點擊事件
- 9. MouseDoubleClick事件不會冒泡
- 10. C#冒泡/傳遞事件
- 11. 冒泡事件設計
- 12. 的Javascript事件不冒泡
- 13. jquery點擊事件冒泡
- 14. Raphael.JS,防止事件冒泡
- 15. 停止href事件冒泡
- 16. 事件冒泡事件代表團
- 17. 事件冒泡和onblur事件
- 18. 事件捕獲vs事件冒泡
- 19. LongListSelector - 點擊事件冒泡SelectionChanged事件
- 20. 在javascript中單擊事件冒泡或失敗冒泡
- 21. JavaScript事件冒泡工作不正常
- 22. 使用querySelector冒泡的事件
- 23. 在IE瀏覽器冒泡事件
- 24. ASP.Net用戶控制事件冒泡(C#)
- 25. 如何讓PropertyChanged事件冒泡?
- 26. 在AWT事件模型中冒泡?
- 27. jquery中的事件冒泡問題
- 28. 事件冒泡和「這個」古怪
- 29. 在javascript中冒泡的逆向事件
- 30. 冒泡一個CSS動畫事件
聽起來很有趣。希望看到實施。 – 2008-10-20 02:55:56