estoy usando una cuadrícula de datos unido a un CollectionViewSource (jugadores), vinculada al elemento seleccionado de un cuadro de lista ( niveles), cada elemento que contenga una colección que desee ordenar/que aparece en la cuadrícula de datos:CollectionViewSource clasificación sólo la primera vez que se enlaza a un origen
<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>
(conjunto de código C# here, el código XAML here, todo proyecto de prueba here - además de la cuadrícula de datos He añadido un cuadro de lista simple para los jugadores, para asegurarse de que no era una cuestión DataGrid)
El problema es que los jugadores se ordenan la primera vez que se muestran, pero tan pronto como selecciono otro nivel del ListBox, ya no se ordenan. Además, modificar los nombres la primera vez que se muestran los jugadores los clasificará de acuerdo a los cambios, pero ya no se aplicará una vez que se haya cambiado el nivel.
Parece que cambiar la fuente de CollectionViewSource de alguna manera rompe la función de ordenación, pero no tengo ni idea de por qué ni cómo solucionarlo. ¿Alguien sabe lo que estoy haciendo mal?
(Hice una prueba con un filtro, pero que uno siguió trabajando como se esperaba)
El marco es .NET 4.
He experimentado lo mismo antes: en lugar de crear un objeto nuevo cada vez, ¿puede quitar y volver a insertar su contenido? – Dave
Además del trabajo extra, que fragmentaría innecesariamente el montón administrado al crear/liberar objetos, preferiría evitarlo si pudiera. – RedGlyph