Привязать методы к кнопкам, созданным во время выполнения программы
У меня есть программа на Avalonia C#, позволяющая с помощью перетаскивания выносить на Canvas новые кнопки. Далее к этим кнопкам планируется привязывать некоторые методы. Например, кнопка должна будет изменять какое-то значение в базе данных, открывать новое окно и тому подобное. Вопрос состоит в следующем: как привязать к кнопкам, созданным таким образом, методы? Вот код, реализующий перетаскивание:
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Media;
namespace DragDrop2.Views;
public partial class MainView : UserControl
{
public MainView()
{
InitializeComponent();
AddHandler(DragDrop.DragOverEvent, DragOver);
AddHandler(DragDrop.DropEvent, Drop);
}
private async void OnPointerPressed(object? sender, PointerPressedEventArgs e)
{
var dragData = new DataObject();
Button button;
CheckBox checkBox;
if (sender is Avalonia.Controls.Control control)
{
if (control.Name == "addButtonLabel")
{
button = new();
button.Content = "Key";
dragData.Set("control", button);
}
else if (control.Name == "addCheckBoxLabel")
{
checkBox = new();
checkBox.Content = "checkBox";
dragData.Set("control", checkBox);
}
else return;
}
else return;
var result = await DragDrop.DoDragDrop(e, dragData, DragDropEffects.Move);
}
private void DragOver(object? sender, DragEventArgs e)
{
e.DragEffects = DragDropEffects.Move;
var data = e.Data.Get("control");
if(!canvas.Children.Contains((Control)data))
canvas.Children.Add((Control)data);
var mousePos = e.GetPosition(canvas);
Canvas.SetLeft((Control)data, mousePos.X);
Canvas.SetTop((Control)data, mousePos.Y);
}
private void Drop(object? sender, DragEventArgs e)
{
}
}