Обработка событий пользовательского элемента управления WPF
У меня есть пользовательский элемент управления с несколькими кнопками, которые должны выполнять различные действия в зависимости от класса, использующего его.
Проблема в том, что я не знаю, как реализовать эти обработчики, потому что при использовании моего пользовательского элемента управления из конечного приложения у меня нет прямого доступа к кнопкам, чтобы указать, какой обработчик обрабатывает какие события.
Как бы вы это сделали?
2 ответа:
Другой способ сделать это-представить события через события в вашем UserControl:
public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } public event RoutedEventHandler Button1Click; private void button1_Click(object sender, RoutedEventArgs e) { if (Button1Click != null) Button1Click(sender, e); } }
Это дает вашему usercontrol событие
Button1Click
, которое подключается к этой кнопке в вашем элементе управления.
Я бы создал команду для каждой кнопки и делегировал для каждого "обработчика". Затем вы можете предоставить делегаты пользователю (конечное приложение)и внутренне вызвать их по методу
Execute()
в командах. Что-то вроде этого:public class MyControl : UserControl { public ICommand FirstButtonCommand { get; set; } public ICommand SecondButtonCommand { get; set; } public Action OnExecuteFirst { get; set; } public Action OnExecuteSecond { get; set; } public MyControl() { FirstButtonCommand = new MyCommand(OnExecuteFirst); FirstButtonCommand = new MyCommand(OnExecuteSecond); } }
Конечно, "MyCommand" должен реализовать ICommand. Также нужно привязать команды к кнопкам соответствующие. Надеюсь, это поможет.