Пустая ссылка исключение события - PullRequest
0 голосов
/ 14 ноября 2011

Я использую приложение WPF c #. У меня есть пользовательский элемент управления, который содержит сетку данных. Я пытаюсь отправить публичное событие из пользовательского элемента управления, щелкнув правой кнопкой мыши. Вот созданное публичное мероприятие

public event MouseButtonEventHandler datagridMouseClick;

Далее его следует запустить в этом обработчике сетки данных:

private void dataGrid1_MouseDown(object sender, MouseButtonEventArgs e)
{
    DependencyObject dep = (DependencyObject)e.OriginalSource;
    while ((dep != null) &&
    !(dep is DataGridCell) &&
    !(dep is DataGridColumnHeader))
    {
        dep = VisualTreeHelper.GetParent(dep);
    }
    if (dep is DataGridCell)
    {
        cell = dep as DataGridCell;
        while ((dep != null) && !(dep is DataGridRow))
        {
            dep = VisualTreeHelper.GetParent(dep);
        }
        row = dep as DataGridRow;
    }

    this.datagridMouseClick(sender, e);  // GIVING ERROR
}

Это дает мне исключение NullReferenceException. Можете ли вы помочь мне понять, почему. Спасибо заранее, любая помощь приветствуется С уважением

Событие обрабатывается в другом классе (на самом деле это другой проект, так как вышеприведенный разделен на dll) .. Поэтому его прослушивают, когда здесь инициализируется другой класс ..

public Window1()
    {
       InitializeComponent();      
        search.datagridDoubleClick +=new RoutedEventHandler(search_datagridDoubleClick);
        search.datagridMouseClick += new MouseButtonEventHandler(search_datagridMouseClick); /* Only this one gives error , even if the other one is handled exactly the same way in the code o.O */

    }

Где поиск - это имя объекта, содержащего вышеуказанный 1-й код

Я думаю, что проблема в том, что я пытаюсь прослушать событие, запущенное из другого класса / проекта (так как первый код взят из .dll) таким образом, что текущий класс не инициализирует слушателя и сохраняет его равным нулю. Несмотря на то, что я использовал этот метод EXACT на search.datagridDoubleClick выше и работает отлично (это странно). PS. я не понимаю -1, звучит как ценный вопрос для меня, в любом случае ...

1 Ответ

4 голосов
/ 14 ноября 2011

Вам необходимо проверить, подписан ли кто-либо на ваше мероприятие, проверив, отличается ли datagridMouseClick от Null.

if (datagridMouseClick != null)
    this.datagridMouseClick(sender, e);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...