Objet collectionviewsource tri uniquement la première fois qu'il est lié à une source de

Je suis à l'aide d'une grille de données lié à un objet collectionviewsource (joueurs), lui-même lié à l'élément sélectionné d'une zone de liste (niveaux), chaque élément contenant une collection à trier/affiché dans la grille de données:

<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>

(tout le code C#ici, code XAML ici, l'ensemble du projet de test ici - en plus de la grille de données, j'ai ajouté une simple zone de liste pour les joueurs, pour s'assurer qu'il n'était pas un DataGrid question)

Le problème est que les joueurs sont triées de la première fois qu'ils apparaissent, mais dès que je sélectionne un autre niveau de la zone de liste, ils ne sont pas triés plus. Aussi, la modification des noms de la première fois que les joueurs sont affichés sur les trier en conséquence de ces changements, mais ne l'est plus une fois que le niveau a été changé.

Donc il semble que la modification de la source de l'objet collectionviewsource en quelque sorte des sauts de la fonctionnalité de tri, mais je n'ai aucune idée pourquoi, ni comment le résoudre. Personne ne sait ce que je fais mal?

(J'ai fait un test avec un filtre, mais que l'on a continué à travailler comme prévu)

Le cadre est .NET 4.

  • J'ai vécu la même chose avant -- au lieu de créer un nouvel objet à chaque fois, pouvez-vous vous retirez et réinsérez de son contenu?
  • Outre le travail supplémentaire, qui serait inutilement fragment le tas managé par la création/validation des objets, je préfère éviter si je le pouvais.
InformationsquelleAutor RedGlyph | 2010-08-31