Обработчик для пользовательского события - PullRequest
4 голосов
/ 22 января 2010

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

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void dataGridTasks_Drop(object sender, RoutedEventArgs e)
    {

    }
}

Здесь код XAML

<ListView  util:DragDropHelper.Drop="dataGridTasks_Drop">

У меня есть эта ошибка во время выполнения в InitializeComponent

Объект типа 'System.String' не может быть преобразованным в тип 'System.Windows.RoutedEventHandler'.

Кто-нибудь знает, почему я получаю эту ошибку? Спасибо!

Вот мой код события

    public static readonly RoutedEvent DropEvent = EventManager.RegisterRoutedEvent(
        "Drop", RoutingStrategy.Bubble, typeof(DropEventArgs), typeof(DragDropHelper));

    public static void AddDropHandler(DependencyObject d, RoutedEventHandler handler)
    {
        UIElement uie = d as UIElement;
        if (uie != null)
        {
            uie.AddHandler(DragDropHelper.DropEvent, handler);
        }
    }

    public static void RemoveDropHandler(DependencyObject d, RoutedEventHandler handler)
    {
        UIElement uie = d as UIElement;
        if (uie != null)
        {
            uie.RemoveHandler(DragDropHelper.DropEvent, handler);
        }
    }

Код DropEventArgs

class DropEventArgs : RoutedEventArgs
{
    public object Data { get; private set; }
    public int Index { get; private set; }

    public DropEventArgs(RoutedEvent routedEvent, object data, int index) 
        : base(routedEvent)
    {
        Data = data;
        Index = index;
    }
}

1 Ответ

6 голосов
/ 25 января 2010

После нескольких часов проверки примеров и моего кода проблема была связана с определением события действительно (спасибо Михиру и Дабблернлу).

Я допустил ошибку в 3-м аргументе метода RegisterRoutedEvent, указав тип события вместо типа Handler.

Правильный код следующий:

    public delegate void DropEventHandler(object sender, DropEventArgs e);

    public static readonly RoutedEvent DropEvent = EventManager.RegisterRoutedEvent(
        "Drop", RoutingStrategy.Bubble, typeof(DropEventHandler), typeof(DragDropHelper));

Сообщение об ошибке вводило в заблуждение.

...