Я использую привязку DataGrid к CollectionViewSource (игрокам), которая сама привязана к выбранному в данный момент элементу ListBox (уровням), каждый элемент, содержащий коллекцию, которая будет сортироваться/отображаться в DataGrid:
<ListBox Name="lstLevel"
DisplayMemberPath="Name"
IsSynchronizedWithCurrentItem="True" />
...
<!-- DataGrid source, as a CollectionViewSource to allow for sorting and/or filtering -->
<CollectionViewSource x:Key="Players"
Source="{Binding ElementName=lstLevel,
Path=SelectedItem.Players}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Name" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
...
<DataGrid Name="lstPlayers" AutoGenerateColumns="False"
CanUserSortColumns="False"
ItemsSource="{Binding Source={StaticResource Players}}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name"
Binding="{Binding Path=Name, Mode=TwoWay}"
Width="*" />
<DataGridTextColumn Header="Age"
Binding="{Binding Path=Age, Mode=TwoWay}"
Width="80">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
(весь код С# здесь, код XAML здесь, весь тестовый проект здесь - в дополнение к DataGrid я добавил простой ListBox для игроков, чтобы убедиться, что это не DataGrid выпуск)
Проблема в том, что игроки сортируются при первом показе, но как только я выберу другой уровень из списка, они больше не сортируются. Кроме того, изменение имен, отображаемых в первый раз, будет отсортировано в соответствии с изменениями, но не больше, как только уровень будет изменен.
Итак, похоже, что изменение источника CollectionViewSource каким-то образом разрушает функцию сортировки, но я понятия не имею, почему и как его исправить. Кто-нибудь знает, что я делаю неправильно?
(Я сделал тест с фильтром, но он работал как ожидалось)
Структура .NET 4.