2

所以我使用 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(在本例中为列表)的末尾,但我需要它们始终按原始DataGrid顺序添加。

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

谢谢!

4

1 回答 1

1

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

我刚刚浏览了 DataGrid 中的所有项目,如果它们被选中,则手动添加它们。

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

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

于 2015-08-05T10:26:49.783 回答