Проблема в том, что GridViewColumnHeader.ClickEvent
на самом деле есть ButtonBase.ClickEvent
, что означает, что обработчик, который вы установили, будет запускаться пользователем, щелкнув по кнопке любой (или производный: checkbox, datepicker, кнопка прокрутки и т. д.) в ListView, а не только на заголовке столбца (который выведен из кнопки).
См. http://social.msdn.microsoft.com/Forums/en/ wpf / thread / 3595d153-4faa-4501-9c6f-2f074658e760
Единственное решение, которое я нашел, - проверить, что header != null
перед тем, как делать что-либо еще, чтобы выйти из обработчика, когда кнопка (e.OriginalSource
) не был заголовком столбца.
Надеюсь, это поможет ...
(PS: также проверьте, есть ли header.Column != null
, чтобы избежать ошибки, когда пользователь нажимает на «последний дополнительный заголовок», пустой заголовок справа от всех «обычных» заголовков ...)
Попробуйте изменить ваш код, как показано ниже:
for name, type, level in zip(names, types, levels):
mytable.append((name.h3.a.text, type.span.text, level.h3.text if level.h3 else "No level"))
Теперь "No level"
(вы можете использовать "N/A"
, None
или все, что вам больше нравится) будет добавлено в качестве третьего значения в случае нет уровня (нет заголовка)