Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在wpf数据网格上禁用多列排序?_C#_.net_Wpf_Datagrid - Fatal编程技术网

C# 如何在wpf数据网格上禁用多列排序?

C# 如何在wpf数据网格上禁用多列排序?,c#,.net,wpf,datagrid,C#,.net,Wpf,Datagrid,我需要在DataGrid上禁用多列排序。这可能吗?您可以创建一个行为并自行处理排序。 以下内容未经测试:) 公共类DataGridICollectionViewSortMerkerBehavior:Behavior { 受保护的覆盖无效附加() { base.onatached(); AssociatedObject.Sorting+=AssociatedObjectSorting; } 附加时受保护的覆盖无效() { base.OnDetaching(); AssociatedObject.S

我需要在DataGrid上禁用多列排序。这可能吗?

您可以创建一个行为并自行处理排序。 以下内容未经测试:)

公共类DataGridICollectionViewSortMerkerBehavior:Behavior
{
受保护的覆盖无效附加()
{
base.onatached();
AssociatedObject.Sorting+=AssociatedObjectSorting;
}
附加时受保护的覆盖无效()
{
base.OnDetaching();
AssociatedObject.Sorting-=AssociatedObjectSorting;
}
无效关联对象排序(对象发送方、DataGridSortingEventArgs e)
{
var view=AssociatedObject.ItemsSource作为ICollectionView;
var propertyname=e.Column.SortMemberPath;
e、 Column.SortDirection=this.GetSortArrowForColumn(e.Column);
如果(视图==null)
返回;
view.SortDescriptions.Clear();
var sort=new sortddescription(propertyname,(ListSortDirection)e.Column.SortDirection);
view.SortDescriptions.Add(排序);
e、 已处理=正确;
}
private ListSortDirection GetSortArrowForColumn(DataGridColumn列)
{
if(col.SortDirection==null)
{
返回ListSortDirection.升序;
}
其他的
{
return col.SortDirection==ListSortDirection.升序?ListSortDirection.Descending:ListSortDirection.升序;
}
}
}
xaml


我成功订阅了DataGrid\u排序事件,并将args的Handled属性设置为true:

private void ResultsDataGrid_Sorting(object sender, DataGridSortingEventArgs e)
{
    if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
    {
        e.Handled = true;
    }
}

你能给我们看一下你目前拥有的一些代码吗?@newagrition:当然,我有一个数据网格和一个自定义分类器,但我不确定这对你是否有帮助……嗯,如果我们知道您的代码是什么,那么在您当前编写的代码中向您提供答案会更容易。@newagrition:我只需要知道WPF DataGrid控件的默认多列排序行为是否可以禁用。据我所知,这个问题与我编写的代码无关,但是在.Net Framework capabilities.mhh上,更容易的应该是在PreviewMouseDown中禁用Shift修饰符…您将如何检查Shift键的状态或修改它?很好。我可能会用一种行为来做
 <DataGrid ...>
    <i:Interaction.Behaviors>
            <Kadia:DataGridICollectionViewSortMerkerBehavior />
    </i:Interaction.Behaviors>
private void ResultsDataGrid_Sorting(object sender, DataGridSortingEventArgs e)
{
    if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
    {
        e.Handled = true;
    }
}