2017-04-20 14 views
-2

我有一個WPF數據網格與兩列,我只想按順序升序取決於選擇哪一列。如果選擇了「名稱」列,排序在「名稱」上升序,或者如果選擇列「描述」,則排序在描述中升序。 它們都不能被降序排列(如果第二次選擇該列,則不應將列從升序類型切換到降序類型)。WPF數據網格列排序一種方式

<DataGrid Name="Person" ItemsSource="{Binding PersonList}" SelectedItem="{Binding Path=SelectedPerson, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn SortDirection="{Binding SortOrder, Mode=TwoWay}" Header="Name" SortMemberPath="Name"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
       <!-- Some template info for displaying Name... --> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTemplateColumn SortDirection="{Binding SortOrder, Mode=TwoWay}" Header="Description" SortMemberPath="Description"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
       <!-- Some template info for displaying Description... --> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid Name="Person"> 
+1

確定該如何解決? !?很好的信息,但我們應該怎麼做呢? –

+0

我想知道如何做到這一點,以便用戶可以選擇他們想要排序的任何列,但只允許他們按升序方式按該列對網格進行排序。 – Stacked

+1

請提供[最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)。顯示你做了什麼。告訴你的問題是什麼,你卡在哪裏。 –

回答

0

我結束了會是一個不同的答案的修改

private void Person_Sorting(object sender, DataGridSortingEventArgs e) 
{ 
    if (e.Column.SortDirection == ListSortDirection.Ascending) 
    { 
     e.Handled = true; 
     return; 
    } 
} 
1

處理的Sorting事件DataGrid的:

private void Person_Sorting(object sender, DataGridSortingEventArgs e) 
{ 
    e.Column.SortDirection = System.ComponentModel.ListSortDirection.Ascending; 
} 

<DataGrid Name="Person" ItemsSource="{Binding PersonList}" Sorting="Person_Sorting" ...> 
+0

這有幫助!我結束的解決方案是基於此。 – Stacked