我有一个 DataGrid,我在我的视图模型中绑定到一个 ObservableCollection,我需要能够在 DataGrid 被排序时对集合进行排序,以便我可以在其他地方使用这个排序顺序。我目前在 ObvservableCollection 上使用包装器来支持排序。对 DataGrid 进行排序时,它仅对显示的数据进行排序,而不对集合中的基础数据进行排序。数据由一个整数列和一个字符串列组成,需要同时支持升序和降序排序。我还想保持与标准 DataGrid 排序相同的用法,在该排序中单击列标题并在升序和降序排序之间切换。我对 WPF 比较陌生,所以我不知道数据和命令绑定的所有来龙去脉,但我认为有一种方法可以完成我想做的事情。
<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 之类的。当新项目添加到集合中时,我也不希望集合重新排序。任何新项目都应该像通常发生的那样添加到集合的末尾。
有任何想法吗?