Обработка событий пользовательского элемента управления WPF


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

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

Как бы вы это сделали?

2 7

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. Также нужно привязать команды к кнопкам соответствующие. Надеюсь, это поможет.