Ситуация следующая:
DataGrid имеет RowDetailsTemplate, который содержит другой DataGrid (подсетка). Если вы добавите DataGridTemplateColumn, который содержит EventHandler, PresentationFramework.dll создает NullReferenceException
.
Эта проблема присутствует только в .NET 4.0 . Если проект нацелен на .NET 3.5 (и использует WPFToolkit для компонента DataGrid), все работает как положено.
Я приложил небольшой пример проекта, который воспроизводит эту ошибку. В проекте есть файл README, который снова объясняет проблему и показывает трассировку стека исключения.
(пример проекта можно найти здесь )
Шаги для воспроизведения:
1. Запустите пример проекта как есть.
2. Попробуйте ссылку «Удалить меня» в первой строке таблицы и убедитесь, что она отображает сообщение.
3. Щелкните ячейку «ПОКАЗАТЬ» в первом столбце и убедитесь, что в ней отображается подсетка с одним элементом.
4. Попробуйте ссылку «Удалить меня» в подсетке, убедитесь, что она ничего не делает (она не связана в коде).
5. Закройте окно и перейдите к MainWindow.xaml
6. Подключите событие Hyperlink.Click в MainWindow.xaml в строке 36: добавьте Click = "HyperlinkClick" в тег Hyperlink.
7. Запустите проект еще раз и нажмите «ПОКАЗАТЬ» в первом столбце: генерируется исключение NullReferenceException!
Это перекрестное от https://connect.microsoft.com/VisualStudio/feedback/details/603333/wpf-datagrid-rowdetails-add-2nd-datagrid-to-rowdetailstemplate-with-eventhandlers#details, но для меня это проблема блокировки.
Итак, проблема в том, почему это происходит? Я думаю, что это ошибка в коде PresentationFramework, но я не уверен на 100%. Что я могу сделать, чтобы EventHandler работал как положено?
Я нашел временный обходной путь, позволив пользователю нажать клавишу удаления, но это нарушает поведение нашего приложения.
Есть ли кто-нибудь, кто может воспроизвести и прокомментировать эту проблему?