Концептуально WPF и SL DataGrid воняет. Все, что требует динамических отношений между строками и столбцами, является хакерским. Например, значение ячейки не может быть вычислено во время выполнения без отражения привязок пользовательского интерфейса и определяется встроенной стратегией DataGrid для отображения значения в ячейке. Предполагается, что столбцы отображают определенный объект в источнике данных, и предполагается, что он знает, как обходить этот источник данных. (Что бы это ни стоило, я доказал это «успешно» (их слова, а не мои) по крайней мере одному поставщику компонентов пользовательского интерфейса WPF, и они могут создать DataGrid, который работает таким образом.) Если вы знакомы с Ext .js, вот как DataGrid работает в этой среде HTML / CSS / JS: DataGrid не знает, что делать с источником данных, вы должны сказать ему, что делать. Все полностью модульно, и существует очень мало жестких связей, которые нельзя переписать без отражения.
Вам лучше создать собственный DataGrid-подобный элемент управления, особенно если у вас нет большого количества строк или столбцов для материализации. Ваш элемент управления должен позволять вам обходить источник данных так, как вы хотите, и предоставлять информацию о том, как визуализировать ячейку и редактировать ячейку. Редактор ячеек, вероятно, должен реализовывать шаблон Flyweight для экономии памяти, но только потому, что это стандартный прием.