禁用wpf DataGrid控件的内置降序排序

时间:2013-04-23 14:03:03

标签: wpf datagrid

我正在使用WPF数据网格,并且需要让用户仅按向上方向对列进行排序,而不是允许下行方向。

有一种简单的方法吗?

琐碎的方法是使用集合视图源实现我自己的排序,并在列标题上监听鼠标单击事件。

2 个答案:

答案 0 :(得分:0)

好的,我明白了......

只需处理DataGrid的排序事件:

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

答案 1 :(得分:0)

您也可以使用“行为”来获取它。因为在这种情况下使用行为会更好。

这就是你要做的事情:

首先将SortOnlyAscending.cs类添加到您的项目中。

public class SortOnlyAscending:Behavior<DataGrid> 
{
    protected override void OnAttached()
    {
        AssociatedObject.Sorting += AssociatedObject_Sorting;
        base.OnAttached();
    }

    protected override void OnDetaching()
    {
        AssociatedObject.Sorting -= AssociatedObject_Sorting;
        base.OnDetaching();
    }

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

然后在.xaml中,你将把这种行为添加到你的DataGrid:

   <DataGrid>
        <i:Interaction.Behaviors>
           <local:SortOnlyAscending/>
        </i:Interaction.Behaviors>
   </DataGrid>

此外,您还必须为.xaml添加两个名称,以便使用您的行为。我的项目名称是WpfApplication1,所以你可以根据需要进行选择。

 xmlns:local ="clr-namespace:WpfApplication1" 
 xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

就是这样。您还需要使用System.Windows.interactivity.dll来使用Behavior类。 您也可以从NUget Package Manager下载它。这是link