我有一个DataGrid,它绑定到我的视图模型中的ObservableCollection,当DataGrid被排序时,我需要能够对集合进行排序,以便我可以在其他地方使用这个排序顺序。目前,我正在使用ObvservableCollection上的包装器来支持排序。当DataGrid被排序时,它只对显示的数据进行排序,而不是对集合中的基础数据进行排序。数据由一个整数列和一个字符串列组成,并且需要支持升序和降序排序。我还想保持与标准DataGrid排序相同的用法,即点击列标题时,在升序和降序之间切换。我相对于WPF比较新,所以我不知道数据和命令绑定的所有细节,但我认为应该有一种方法来实现我想要做的事情。以下是一个示例xaml,用于说明我的视图设置。
<DataGrid ItemsSource="{Binding mySource}"
Name="myDataGrid"
CanUserResizeRows="False"
AutoGenerateColumns="False"
HeadersVisibility="Column" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Header 1" CanUserSort="True" SortMemberPath="firstValue">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding firstValue}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Header 2" Width="*" CanUserSort="True" SortMemberPath="secondValue">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding secondValue}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
源数据的类型类似于这样:
public class myType
{
public int firstValue { get; set; }
public string secondValue { get; set; }
// some functions and variables...
}
现在,正如我上面所说的,我需要按照其排序顺序访问集合中的项,但它不一定要特别是一个ObservableCollection。只要我能够按照当前顺序迭代访问集合中的项,那就没问题了。我想也许可以使用ListCollectionView或类似的东西。我也不希望当向集合添加新项时,集合重新进行排序。任何新项应该像通常情况下一样被添加到集合的末尾。
有什么好的想法吗?