2016-08-04 8 views
0

Ich habe ein WPF-Projekt - ein DataGrid mit vier Spalten: ColumnOne, ColumnTwo, ColumnThree, ColumnFour. Ist es möglich, dass, wenn der Benutzer nach ColumnOne oder ColumnTwo sortiert, der Code dahinter auch die Sortierung nach ColumnThree hinzufügt, so dass er wie SortBy ("ColumnOne") sortiert wird. ThenBy ("ColumnThree"). Wenn dies von Bedeutung ist, ist ItemsSource für mein DataGrid eine PagedCollectionView, die SortDescriptors unterstützt.DataGrid anfügen eine andere Spalte sortieren

Antwort

1

Sie haben DataGrid.OnSorting wie in diesem einfachen Beispiel außer Kraft zu setzen (aber bitte erweitern es um Ihre voll Anforderungen) und verwenden Sie die benutzerdefinierten Kontrolle anstelle der Standard-DataGrid in XAML.

public class MyDataGrid : DataGrid 
    { 
     protected override void OnSorting(DataGridSortingEventArgs eventArgs) 
     { 
      base.OnSorting(eventArgs); 
      var test = eventArgs.Column; 
      if (test.Header.ToString() == "ColumnOne" && test.SortDirection.HasValue 
       && test.SortDirection.Value.Equals(ListSortDirection.Ascending) 
       ) 
      { 
       ICollectionView view = CollectionViewSource.GetDefaultView(this.ItemsSource); 
       view.SortDescriptions.Add(new SortDescription("ColumnThree", ListSortDirection.Ascending)); 
       view.Refresh(); 

       this.Columns[2].SortDirection = ListSortDirection.Ascending; 
      } 
     } 
    } 

Der obige Code behandelt sowohl die colletion Sortierung und die SortDirection Eigenschaftseinstellung für ColumnThree in nur einem Fall: wenn der Benutzer Aufträge von ColumnOne aufsteigend.