Событие обработано на 2 уровня - PullRequest
0 голосов
/ 02 марта 2012

В приложении WPF (C #) у меня есть экземпляр ObjectX в классе ClassA .Этот ClassA создается в ClassB .

Следовательно ClassB -> содержит экземпляр -> ClassA -> , который содержит экземпляр -> ObjectX

ObjectX вызывает EventA .Мне нужно обработать это событие в ClassB.

Как называется эта концепция (делегирование событий, маршрутизация событий, ...)?И как это можно сделать?

Ответы [ 2 ]

1 голос
/ 02 марта 2012

В WPF это называется Маршрутизируемые события , но это будет работать, только если оба они истинны:

  1. Мы говорим о классах элементов, и «содержит» означает, что один из ваших элементов управления фактически содержит другой [и LogicalTreeHelper утверждает, что ваши элементы управления являются родителями / детьми друг для друга.
  2. Если искомое событие определено как маршрутизируемое с правильной стратегией маршрутизации - будет работать либо tunelled, либо bubbling. Если это не так, то маршрутизация событий вам не поможет.

У меня такое ощущение, что все, что вам нужно, это что-то вроде этого:

в классе B:

this.instanceOfA.InstanceOfX.MyEvent += MyHandlerInClassB;

но это не имеет никакого отношения к WPF.


UPD: или что-то вроде этого, если вы не хотите делать instanceOfX доступным:

  1. Определите то же событие для classA и вызывайте его всякий раз, когда instanceOfX вызывает его событие
  2. В ClassB ручка instanceOfA.MyEvent

В этом случае вы можете оставить instanceOfX приватным, но вам придется добавить еще одно событие в середине.

0 голосов
/ 02 марта 2012

WPF имеет маршрутизированные события:

Вызывает обработчики для нескольких слушателей в дереве элементов, а не только для объекта, вызвавшего событие.

http://msdn.microsoft.com/en-us/library/ms742806.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...