0

我正在使用 WPF 数据网格,需要让用户仅按升序对列进行排序,而不允许降序。

有没有简单的方法可以做到这一点?

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

4

2 回答 2

0

好,我知道了 ...

只需处理 DataGrid 的排序事件:

 private void DataGrid_OnSorting(object sender, DataGridSortingEventArgs e)
    {
        e.Column.SortDirection = ListSortDirection.Ascending;
    }
于 2013-04-23T14:29:45.087 回答
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 下载它。这是链接

于 2013-04-23T14:30:01.133 回答