Вы всегда можете попробовать это:
ObservableCollection<MyBaseClass> myCollection = new ObservableCollection<MyBaseClass>;
myCollection.Add(new Subclass_A());
myCollection.Add(new Subclass_B());
...
Создайте шаблоны данных для каждого подкласса и подключите myCollection к DataGrid.На этом этапе у вас будет Grid, заполненный двумя типами (Subclass_A, Subclass_B).Волшебство заключается в использовании DataTemplateSelector в вашей DataGrid:
<DataGrid ItemTemplateSelector="{DynamicResource GridTemplateSelector}">
, имея это, Grid (на самом деле большинство контейнеров) будет запрашивать DataTemplate при рисовании элемента и применять соответственно.