如何维护数据网格的选定项中的顺序

本文关键字:顺序 网格 数据网 何维护 维护 数据 | 更新日期: 2023-09-27 18:36:48

所以我正在使用C#/WPF,我有一个DataGrid。 我需要允许用户在DataGrid中选择多个项目。 但是,我注意到SelectedItems的顺序取决于用户选择它们的方向或顺序。 例如,如果它们从下往上拖动,则项目基本上与它们在DataGrid中的顺序相反。 我需要这些项目以与DataGrid相同的顺序出现在SelectedItems集合中。

以下是我正在做的事情的示例:

        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并再次添加到ItemsSource的末尾(在本例中为 List),但我需要它们始终按原始DataGrid顺序添加。

如果有更好的方法可以做到这一点,或者您知道如何使用它使用原始订单,请告诉我。 似乎SelectedItems没有任何来自DataGrid的固有索引,只有按选择顺序排列的项目索引。 而且我真的不想仅仅为了处理此索引而修改基类。

谢谢!

如何维护数据网格的选定项中的顺序

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

我刚刚浏览了 DataGrid 中的所有项目,并在选择了它们时手动添加它们。

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

我使用了"包含"功能,因为我实际上没有很多项目,所以它不是真正的性能影响,但如果你这样做 - 你可以只使用字典,性能会好得多。