2013-10-23 4 views
2

그래서 C#/WPF를 사용하고 있는데 DataGrid이 있습니다. 사용자가 DataGrid에서 여러 항목을 선택할 수있게해야합니다. 그러나 SelectedItems의 순서는 사용자가 선택하는 방향이나 순서에 따라 달라집니다. 예를 들어 아래에서 위쪽으로 끌면 항목은 본질적으로 DataGrid에있는 순서와 반대가됩니다. 이 항목들이 DataGrid과 같은 순서로 SelectedItems 컬렉션에 있어야합니다. 당신이 볼 수 있듯이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의 마지막에 다시 추가입니다 : 여기

내가 뭘하는지의 샘플입니다 이 경우 목록).하지만 원래의 DataGrid 주문서에 항상 추가해야합니다.

더 좋은 방법이 있거나 원래 주문을 사용하는 방법을 알고 있다면 알려주세요. SelectedItems에는 DataGrid의 고유 색인이없고 선택한 색인의 항목 색인 만있는 것으로 보입니다. 그리고이 인덱싱을 처리하기 위해 기본 클래스를 수정하고 싶지는 않습니다.

감사합니다.

+0

나에게는 이상한 것처럼 보입니다.하지만 항목을 추가하기 전에 선택한 항목을 정렬하기 위해 빠른 정렬 (또는 C#에서 즉시 사용할 수있는 정렬)을 사용하지 않는 이유는 무엇입니까? –

답변

1

지연된 답변에 사과드립니다. 그러나 장래의 독자에게 도움이되기를 바랍니다.

방금 ​​DataGrid의 모든 항목을 검토하고 선택하면 수동으로 추가했습니다. 정말 많은 항목이없는 기능 때문에 내가 사용했습니다

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

은 "포함"그래서 실제 성능 저하가 아니라, 당신이 경우에 - 당신은 그냥 사전을 사용할 수 있으며 성능이 훨씬 좋아질 것입니다.