Używam DataGrid związany z CollectionViewSource (gracze), sam związany z aktualnie wybranego elementu ListBox (poziomy), każdy artykuł zawierający zbiór być klasyfikowane/wyświetlane w DataGrid:CollectionViewSource tylko za pierwszym razem sortowania jest związany ze źródłem
<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>
(cały kod C# here, kod XAML here, cały projekt testowy here - oprócz DataGrid Dodałem prosty ListBox dla graczy, aby upewnić się, że nie był to problem DataGrid)
Problem polega na tym, że gracze są sortowani przy pierwszym wyświetleniu, ale gdy tylko wybiorę inny poziom z ListBox, nie są już posortowani. Ponadto modyfikowanie nazw, które pojawią się po raz pierwszy, spowoduje posortowanie ich zgodnie ze zmianami, ale już nie, gdy poziom zostanie zmieniony.
Wygląda na to, że zmiana źródła CollectionViewSource w jakiś sposób łamie funkcję sortowania, ale nie mam pojęcia, dlaczego, ani jak to naprawić. Czy ktoś wie, co robię źle?
(Zrobiłem test z filtrem, ale utrzymuje, że jeden działa zgodnie z oczekiwaniami)
Ramy jest .NET 4.
Doświadczyłem już tego samego - zamiast tworzyć nowy obiekt za każdym razem, można usunąć i ponownie wstawić jego zawartość? – Dave
Oprócz dodatkowej pracy, która niepotrzebnie rozdzieliłaby zarządzaną stertę przez tworzenie/zwalnianie obiektów, wolałbym tego uniknąć, gdybym mogła. – RedGlyph