Предварительный просмотр события 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
является нулевым в то время.
Смотрите распространение событий, как это работает -