Я столкнулся с той же проблемой и потратил много времени на поиск. В конце концов, решение было ОЧЕНЬ простым:
<Window.Resources>
<CollectionViewSource x:Key="milestonesViewSource" CollectionViewType="ListCollectionView"/>
</Window.Resources>
<Grid DataContext="{StaticResource milestonesViewSource}">
<DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" RowDetailsVisibilityMode="VisibleWhenSelected">
<DataGrid.Columns>
<DataGridTextColumn x:Name="milestoneIdColumn" Binding="{Binding Path=MilestoneId}" Header="Milestone Id"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
Проблема в CollectionViewSource, который по умолчанию создает BindingListCollectionView, который реализует IBindingList, который не поддерживает сортировку!
Но CollectionViewSource имеет свойство CollectionViewType, которое позволяет изменить тип представления на ListCollectionView, что позволяет сортировать. Это все.
Я только что исправил это сегодня в своем коде, так что я пока не знаю, каковы побочные эффекты. В настоящее время, кажется, все работает нормально.