C# 如何在DataGrid的SelectedItems中维护订单?

C# 如何在DataGrid的SelectedItems中维护订单?,c#,wpf,datagrid,selecteditem,C#,Wpf,Datagrid,Selecteditem,所以我使用C/WPF,我有一个数据网格。我需要允许用户在DataGrid中选择多个项目。然而,我注意到SelectedItems的顺序取决于用户选择它们的方向或顺序。例如,如果它们从下往上拖动,那么这些项本质上与它们在数据网格本身中的顺序相反。我需要这些项在SelectedItems集合中的顺序与它们在DataGrid中的顺序相同 下面是我正在做的一个示例: DataGrid grid = DataGridWorkoutTemplate; if (grid.Se

所以我使用C/WPF,我有一个数据网格。我需要允许用户在DataGrid中选择多个项目。然而,我注意到SelectedItems的顺序取决于用户选择它们的方向或顺序。例如,如果它们从下往上拖动,那么这些项本质上与它们在数据网格本身中的顺序相反。我需要这些项在SelectedItems集合中的顺序与它们在DataGrid中的顺序相同

下面是我正在做的一个示例:

        DataGrid grid = DataGridWorkoutTemplate;

        if (grid.SelectedItems.Count > 1)
        {
            List<IntervalDisplay> source = (List<IntervalDisplay>)grid.ItemsSource;
            List<IntervalDisplay> newSource = new List<IntervalDisplay>(source);

            foreach (IntervalDisplay row in grid.SelectedItems)
            {
                newSource.Add(row);
            }

            grid.ItemsSource = newSource;
如您所见,我所要做的就是将SelectedItems中的项再次添加到项的末尾。在本例中,请获取一个列表,但我需要始终按照原始的DataGrid顺序添加它们

如果有更好的方法,或者你知道如何使用原始订单,请告诉我。SelectedItems似乎没有来自DataGrid的任何固有索引,只是按照项目被选择的顺序进行索引。我真的不想仅仅为了处理这个索引而修改基类


谢谢

对于延迟的回答表示歉意,但希望它能对未来的读者有所帮助

我只是浏览了DataGrid中的所有项目,并手动添加了它们(如果选中)

  var selectedList = new ObservableCollection<object>();
  foreach (var item in dataGrid.Items)
  {
    if (dataGrid.SelectedItems.Contains(item))
    {
      selectedList.Add(item);
    }
  }

我使用了Contains函数,因为我没有太多的项目,所以这不是真正的性能问题,但是如果你使用了,你可以使用字典,性能会更好。

我觉得很奇怪,但是为什么不在将所选项目添加到itemssource之前,使用快速排序或任何在c中可用的排序对其进行排序呢?