sto usando un DataGrid associato a un CollectionViewSource (giocatori), vincolata alla voce selezionata di un ListBox (livelli), ogni elemento contenente una collezione da ordinare/visualizzato nel DataGrid:CollectionViewSource l'ordinamento solo la prima volta che viene associato a un'origine
<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>
(intero codice C# here, il codice XAML here, dell'intero progetto di test here - oltre al DataGrid Ho una semplice ListBox per i giocatori, per assicurarsi che non era un problema di DataGrid)
Il problema è che i giocatori vengono ordinati la prima volta che vengono mostrati, ma non appena seleziono un altro livello dal ListBox, non vengono più ordinati. Inoltre, modificando i nomi la prima volta che i giocatori vengono mostrati li ordinerai in base alle modifiche, ma non più una volta che il livello è stato cambiato.
Quindi sembra che la modifica dell'origine di CollectionViewSource interrompa in qualche modo la funzionalità di ordinamento, ma non ho idea del perché, né di come risolverlo. Qualcuno sa cosa sto sbagliando?
(ho fatto un test con un filtro, ma che si continuò a lavorare come previsto)
Il quadro è NET 4.
Ho sperimentato la stessa cosa prima - invece di creare ogni volta un nuovo oggetto, puoi rimuovere e reinserire il suo contenuto? – Dave
Oltre al lavoro extra, che frammenterebbe inutilmente l'heap gestito creando/rilasciando oggetti, preferirei evitarlo se potessi. – RedGlyph