如何维护DataGrid的SelectedItems中的顺序?

时间:2013-10-23 20:46:22

标签: c# wpf datagrid selecteditem

所以我使用的是C#/ WPF,我有一个DataGrid。我需要允许用户在DataGrid中选择多个项目。但是,我注意到SelectedItems的顺序取决于用户选择它们的方向或顺序。例如,如果他们从下往上拖动,那么这些项目基本上与它们在DataGrid本身中的顺序相反。我需要将这些项目放在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中的项目再次添加到ItemsSource的末尾(本例中为List),但我需要它们始终以原始DataGrid顺序添加。

如果有更好的方法,或者您知道如何使用原始订单,请告诉我。似乎SelectedItems没有来自DataGrid的任何固有索引,只是选择它们的项目的索引。我真的不想修改基类来处理这个索引。

谢谢!

1 个答案:

答案 0 :(得分:1)

对延迟回答道歉,但希望这对未来的读者有所帮助。

我刚刚查看了DataGrid中的所有项目,并在他们被选中后手动添加。

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

我已经使用了&#34;包含&#34;功能因为我没有很多项目,所以它不是真正的性能影响,但如果你这样做 - 你可以只使用字典,性能会更好。