Подтвердить что ты не робот

Переполнение событий.

У меня есть несколько уровней в приложении, и я обнаружил, что мне приходится пузырять события на уровне графического интерфейса для выполнения изменений в строке состояния и т.д., Мне приходится записывать повторяющиеся коды, где каждый слой просто подписывается на события с нижнего уровня, а затем в обратном вызове просто поднимает событие вверх по цепочке. Есть ли более эффективный способ сделать это?

4b9b3361

Ответ 1

Если все, что вы делаете, запускает обработчик событий из другого обработчика событий, вы можете вырезать среднего человека и перехватить обработчики событий непосредственно в блоках добавления/удаления для события.

Например, если у вас есть UserControl с событием "SaveButtonClick", и все, что вы хотите сделать, когда вызывается обработчик события при нажатии "SaveButton" на вашем UserControl, вы можете сделать это:

public event EventHandler SaveButtonClick
{
    add { this.SaveButton.Click += value; }
    remove { this.SaveButton.Click -= value; }
}

Теперь вам не нужен какой-либо код для запуска события SaveButtonClick - он будет автоматически запущен, когда событие SaveButton.Click будет поднято (т.е. когда кто-то нажимает на эту кнопку).

Ответ 2

Прочитайте блог Джереми Миллера "Разработчик дерева тени", особенно его Напишите свою собственную серию CAB - материал команды, который он говорит о том, что, вероятно, вам нужно.

Ответ 4

Если я не увижу немного больше дизайна, вам будет трудно дать хороший ответ.

WPF запускает события пузырьков (автоматически) в дереве компонентов/дерева пользовательского интерфейса... это теперь встроено в структуру. Поэтому я предполагаю, что рекомендуемый способ:)

Проблема с обходом среднего человека Layer2 заключается в том, что Layer1 и Layer3 теперь знают друг друга... связаны. Так что это компромисс. Если вы в порядке с муфтой, устраните среднего человека/придумайте специальный компонент с этой ответственностью. Однако, если вы ожидаете, что уровень 3 будет с возможностью горячей замены (низкая связь), я бы сказал, продолжайте пузыриться.

Ответ 5

У вас может быть центральный канал, поддерживающий только события. Этот канал должен быть независимым, чтобы слой публиковал или подписывался на него.

Ответ 6

Посмотрите Update Controls.NET. Эти элементы управления обнаруживают части вашей модели данных, от которых они зависят даже от слоев бизнес-логики. Вам не нужно писать какой-либо код, чтобы уведомить их.