Я новичок в разработке GUI, в частности с WPF, и не знаю связанных шаблонов. Поэтому я хочу спросить вас о проблеме, которая возникает время от времени, и я не уверен в том, какое решение лучше для нее.
Пусть у нас есть три пользовательских элемента управления A, B, C и элемент управления A включает элемент управления B, элемент управления B включает элемент управления C. Пусть элемент управления C имеет кнопку. Событие click для этого должно решаться с использованием данных из класса A. Я вижу следующий возможный способ разобраться в этой ситуации:
1) Добавьте метод InnerButtonClick (отправитель объекта, RoutedEventArgs e) к классу A, который будет бороться с пузырьковым событием, вызванным нашей кнопкой. Недостатки:
i) этот метод будет перехватывать все события button.click от детей A. Поэтому мне потребуется реализовать некоторую условную логику в методе, чтобы проверить, вызвано ли событие нашей кнопкой.
ii) Получить там свойства С не так просто. Это может выглядеть как
var btn = (Button)e.OriginalSource;
string userName = ((ActionButtons)((UserControl)((StackPanel)btn.Parent).Parent)).UserName;
, если кнопка находится в StackPanel и StackPanel в пользовательском элементе управления C.
2) Предоставить доступ к необходимым данным для класса C. Например, передать данные в класс B, а затем в C. Недостатки:
i) часто это не так просто.
ii) вызывает дополнительные параметры методов / конструкторов.
3) Создать статический метод в классе A, который может вызываться методами класса C.
Недостатки:
i) Это выглядит немного неприятно. Это путь к синглтону, шаблон из «темной стороны силы»)