WPF数据网格列排序方式

时间:2017-04-20 19:25:05

标签: c# wpf sorting

我有一个包含两列的WPF Datagrid,我只想根据选择的列进行升序排序。如果列"名称"如果选择,则排序在"名称"上升序,或者,如果列"描述"而是选择,排序在描述上升序。 它们都不能以降序排序(如果第二次选择该列,则不应将列从升序排序切换为降序排序)。

<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">

2 个答案:

答案 0 :(得分:1)

处理Sorting的{​​{1}}事件:

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

答案 1 :(得分:0)

我最终选择的解决方案是对不同答案的修改

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