我正在使用绑定到 CollectionViewSource ( players ) 的 DataGrid,它本身绑定到 ListBox ( levels ) 的当前选定项,每个项都包含要在 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>
(这里是整个 C# 代码,这里是 XAML 代码,这里是整个测试项目- 除了 DataGrid,我还为玩家添加了一个简单的 ListBox,以确保它不是 DataGrid 问题)
问题是播放器在第一次显示时已排序,但是一旦我从 ListBox 中选择另一个级别,它们就不再排序了。此外,在第一次显示玩家时修改名称将根据更改对它们进行排序,但一旦级别更改就不再如此。
所以看起来改变 CollectionViewSource 的来源以某种方式破坏了排序功能,但我不知道为什么,也不知道如何修复它。有谁知道我做错了什么?
(我用过滤器做了一个测试,但那个过滤器一直按预期工作)
该框架是.NET 4。