2

だから私はC#/ WPFを使用していて、DataGrid. ユーザーが で複数のアイテムを選択できるようにする必要がありますDataGridSelectedItemsただし、の順序は、ユーザーが選択した方向または順序に依存することに気付きました。たとえば、下から上にドラッグすると、アイテムは基本的に、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の最後に再度追加することだけですが、常に元の順序で追加する必要があります。ItemsSourceDataGrid

これを行うためのより良い方法がある場合、または元の順序を使用する方法を知っている場合は、お知らせください. 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 に答える