2017-04-20 105 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