Предварительный просмотр события Mouse Down возвращает отправителя с нулевой ссылкой CurrentColumn при первом вызове

Я запускаю свое приложение и заполняю сетку данных данными. Затем я нажимаю на строку и обрабатываю событие следующим образом:

  private void dataGridCanTabParamList_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        var buffer = sender as DataGrid;

        if ((buffer == null) || (buffer.CurrentColumn == null) )
            return;

        SetCanPropertyDesription(buffer.CurrentColumn.Header.ToString());

    }

Когда я запускаю это событие в первый раз, CurrentColumn является нулевым, когда я запускаю это событие во второй раз, щелкая точно в той же позиции, CurrentColumn содержит данные. CurrentItem также пуст при первом нажатии.

Почему я не вижу данные с первого клика?

2 ответа

Решение

Это потому, что CurrentColumn и CurrentItem ссылаются на выбранный столбец / элемент. При первом нажатии ничего не выбирается при обработке туннельного события (поэтому ваш код выполняется до того, как DataGrid фактически установит текущий элемент) . Когда вы нажимаете второй раз, CurrentColumn и CurrentItem уже были установлены.

PreviewMouseDownEvent это туннельное событие, которое возникает до фактического MouseDown событие.

А также MouseDown event(handled by DataGridCell) отвечает за выбор столбца в dataGrid. Итак, в первый раз ваша клетка не выбрана отсюда CurrentItem а также CurrentColumn является нулевым в то время.

Смотрите распространение событий, как это работает -

Другие вопросы по тегам