Conceptually, the WPF and SL DataGrid stinks. Anything that requires dynamic relationships among rows and columns is hackish. For example, a cell's value cannot be computed at run-time w/o reflection on UI bindings, and is determined by the DataGrid's hardwired strategy for displaying a value in a cell. It assumes that Columns display a specific object in a Data Source, and it assumes that it knows how to walk that data source. (For what it is worth, I've argued this "successfully" (their words, not mine) to at least one WPF UI component vendor, and they might create a DataGrid that works this way.) If you're familiar with Ext.js, that's how DataGrid's work in that HTML/CSS/JS framework: DataGrid's have no knowledge of what to do with a DataSource, you have to tell it what to do. Everything is completely modularized and there is very little hardwiring of dependencies that can't be overwritten without reflection.
You are better off creating your own DataGrid-like control, especially if you don't have a large number of rows or columns to materialize. Your control should let you walk the DataSource however you want and supply information on how to render the cell and edit the cell. The cell editor should probably implement a Flyweight pattern to conserve memory, but only because that is a standard trick.