Чтобы решить эту проблему, мы сделали следующее.
Мы использовали DataTemplates для представления разных представлений строк для разных моделей представления строк. У нас были GroupRowViewModel и ItemRowViewModel. Также родительская ViewModel, у которой был отсортированный список групповых / видовых моделей.
Когда создавалась сетка, родительская ViewModel сортировала все дочерние модели представления в следующее:
При щелчке по GroupRow вы хотите выполнить некоторый код, в котором родительский элемент (который содержит отсортированный список строк группы + элементов) удалит или включит элементы. Например. скажем, вторая группа была нажата, ваш список моделей строк, с которыми вы сейчас связываете, становится
- Группа
- Группа (Свернутая)
Вот и все. Так что никакой магии нет, вы вручную удаляете или включаете нужные вам строки в зависимости от того, на что нажали. Он работал с виртуализацией и сотнями тысяч строк с приемлемой скоростью.
Извините, я не могу опубликовать код (из-за NDA), но я надеюсь, что это поможет вам. Также - я бы посоветовал взглянуть на Telerik Grid, так как это очень быстро для больших наборов данных