所以我使用的是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
的任何固有索引,只是选择它们的项目的索引。我真的不想修改基类来处理这个索引。
谢谢!
答案 0 :(得分:1)
对延迟回答道歉,但希望这对未来的读者有所帮助。
我刚刚查看了DataGrid中的所有项目,并在他们被选中后手动添加。
var selectedList = new ObservableCollection<object>();
foreach (var item in dataGrid.Items)
{
if (dataGrid.SelectedItems.Contains(item))
{
selectedList.Add(item);
}
}
我已经使用了&#34;包含&#34;功能因为我没有很多项目,所以它不是真正的性能影响,但如果你这样做 - 你可以只使用字典,性能会更好。