WPF: Маршрутизированные события или регулярные события?

В WPF мы разбили события. Когда они должны использоваться вместо обычных событий?

Ответ 1

Маршрутизированные события имеют особое поведение, но это поведение в значительной степени невидимо, если вы обрабатываете событие на элементе, где он поднят.

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

Для прослушиваемых прослушиваемых событий событий и источников маршрутизируемых событий не нужно обмениваться общим событием в своей иерархии. Любой UIElement или ContentElement может быть событием прослушиватель для любого маршрутизируемого события. Таким образом, вы можете использовать полный набор маршрутизируемых событий, доступных в течение всего рабочего API, как концептуальный "интерфейс", посредством которого разрозненные элементы приложения могут обмениваться информацией о событиях. Эта концепция интерфейса для маршрутизируемых событий особенно применима для входных событий.

Маршрутизированные события также могут использоваться для связи через дерево элементов, поскольку данные события для события передаются каждому элементу маршрута. Один элемент может что-то изменить в данных события, и это изменение будет доступно для следующего элемента маршрута.

Помимо аспекта маршрутизации существуют две другие причины, по которым любое событие WPF может быть реализовано как маршрутизируемое событие вместо стандартного события CLR. Если вы реализуете свои собственные события, вы также можете рассмотреть эти принципы:

  • Некоторые функции стилизации и шаблона WPF, такие как EventSetter и EventTrigger требует, чтобы связанное событие было маршрутизируемым событием. Это сценарий идентификатора события, упомянутый ранее.
  • Маршрутизированные события поддерживают механизм обработки класса, при котором класс может указывать статические методы, которые имеют возможность обрабатывать маршрутизируемые события до того, как любые зарегистрированные обработчики экземпляров могут получить к ним доступ. Это очень полезно в дизайне управления, потому что ваш класс может применять поведение поведения, управляемое событиями, которое невозможно случайно исключить, обработав событие на экземпляре.

Источник: MSDN: Обзор маршрутизированных событий

Ответ 2

В составе WPF очень эффективна композиция. который обязывает использовать событие "Маршрутизация", потому что состав набора элементов управления большую часть времени выделяет одну активность.