У меня есть несколько слоев в приложении, и я обнаружил, что мне приходится пузырить события на уровень графического интерфейса пользователя для выполнения изменений в строке состояния и т. Д. , Мне приходится записывать повторяющиеся коды, где каждый слой просто подписывается на события с нижнего уровня, а затем в обратном вызове просто поднимает событие вверх по цепочке. Есть ли более эффективный способ сделать это?Bubbling события.
ответ
Если все, что вы делаете, запускает обработчик событий из другого обработчика событий, вы можете вырезать среднего человека и перехватить обработчики событий непосредственно в блоках добавления/удаления для события.
Например, если у вас есть UserControl с событием «SaveButtonClick», и все, что вы хотите делать, когда это вызвать обработчик события, когда «SaveButton» на UserControl нажата, вы можете сделать это:
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 запускает события пузырьков (автоматически), компонент Component/Control UI ... это теперь встроено в структуру. Поэтому я думаю, что это рекомендуемый способ:
Проблема с обходом среднего человека Layer2 заключается в том, что Layer1 и Layer3 теперь знают друг друга ... связаны. Так что это компромисс. Если вы в порядке с муфтой, устраните среднего человека/придумайте специальный компонент с этой ответственностью. Однако, если вы ожидаете, что уровень 3 будет с возможностью горячей замены (низкое сцепление), я бы сказал, продолжайте пузыриться.
Взгляните на Update Controls .NET. Эти элементы управления обнаруживают части вашей модели данных, от которых они зависят даже от слоев бизнес-логики. Вам не нужно писать код, чтобы уведомить об этом.
Прочитайте блог Джереми Миллера «Разработчик дерева тени», особенно его Write Your Own CAB series - материал команды, в котором он говорит о том, что, вероятно, вам нужно.
Peter Rilling опубликовал способ моделирования событий Bubbling/Broadcasting в winforms. Это просто и эффективно.
- 1. События bubbling в списке
- 2. события Bubbling Jquery + Tabs
- 3. Окончание события JQuery Bubbling
- 4. Событие Bubbling для пользовательского события в WPF?
- 5. События Bubbling в WPF? Простой вопрос
- 6. jQuery и событие bubbling: остановить нежелательные события
- 7. Bubbling up WPF Datagrid Событие события
- 8. Bubbling Event Design
- 9. Событие Bubbling и jQuery
- 10. Div event bubbling
- 11. jquery click event bubbling
- 12. Событие Bubbling и прекращение распространения
- 13. Bubbling events in IE
- 14. flex custom events bubbling
- 15. Объект или свойства Bubbling?
- 16. Bubbling Events not Occending
- 17. события Bubbling От управления веб-пользователей в ASP.NET
- 18. Обработчики событий и прослушиватели и события Bubbling и Event Capturing
- 19. Bubbling прокручивает события от ListView до его родителя
- 20. Adobe InDesign - наложение веб-содержимого - предотвращение прокрутки события Bubbling
- 21. Событие фаза события прослушивателя событий и событий Bubbling
- 22. GWT: debug events capture/bubbling
- 23. Bubbling componentWillUpdate и componentDidUpdate
- 24. C# Bubbling/Passing Along Event
- 25. jQuery событие bubbling и event.targets
- 26. Bubbling событие, вызванное отключенным элементом
- 27. Событие bubbling и событие onblur
- 28. Checkbox Bubbling to div - Javascript
- 29. Event Capturing vs Event Bubbling
- 30. Разница между событиями Bubbling и Tunneling
Это звучит интересно. Хотелось бы увидеть реализацию. – 2008-10-20 02:55:56