From b4738926493db56ab99eb96b361a6b2c55487300 Mon Sep 17 00:00:00 2001
From: 0x90d <46010672+0x90d@users.noreply.github.com>
Date: Fri, 15 Oct 2021 05:29:42 +0200
Subject: [PATCH 1/5] Update DataGridColumn.cs
---
.../DataGridColumn.cs | 20 +++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
index 4ab2869138..07adac597f 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
@@ -653,6 +653,26 @@ namespace Avalonia.Controls
return null;
}
+ ///
+ /// Switches the current state of sort direction
+ ///
+ /// Clear the current sort direction instead
+ public void PerformSort(bool clear)
+ {
+ //InvokeProcessSort is already validating if sorting is possible
+ _headerCell?.InvokeProcessSort(clear ? Input.KeyModifiers.Control : Input.KeyModifiers.None);
+ }
+
+ ///
+ /// Changes the sort direction of this column
+ ///
+ /// New sort direction
+ public void PerformSort(ListSortDirection direction)
+ {
+ //InvokeProcessSort is already validating if sorting is possible
+ _headerCell?.InvokeProcessSort(Input.KeyModifiers.None, direction);
+ }
+
///
/// When overridden in a derived class, causes the column cell being edited to revert to the unedited value.
///
From 68a3f7fa975617fac4134b576b147fc028fede3d Mon Sep 17 00:00:00 2001
From: 0x90d <46010672+0x90d@users.noreply.github.com>
Date: Fri, 15 Oct 2021 05:35:19 +0200
Subject: [PATCH 2/5] Update DataGridColumnHeader.cs
---
.../DataGridColumnHeader.cs | 26 ++++++++++++++-----
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
index 6f957497cb..85fd55800a 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
@@ -201,21 +201,21 @@ namespace Avalonia.Controls
handled = true;
}
- internal void InvokeProcessSort(KeyModifiers keyModifiers)
+ internal void InvokeProcessSort(KeyModifiers keyModifiers, ListSortDirection? forcedDirection = null)
{
Debug.Assert(OwningGrid != null);
- if (OwningGrid.WaitForLostFocus(() => InvokeProcessSort(keyModifiers)))
+ if (OwningGrid.WaitForLostFocus(() => InvokeProcessSort(keyModifiers, forcedDirection)))
{
return;
}
if (OwningGrid.CommitEdit(DataGridEditingUnit.Row, exitEditingMode: true))
{
- Avalonia.Threading.Dispatcher.UIThread.Post(() => ProcessSort(keyModifiers));
+ Avalonia.Threading.Dispatcher.UIThread.Post(() => ProcessSort(keyModifiers, forcedDirection));
}
}
//TODO GroupSorting
- internal void ProcessSort(KeyModifiers keyModifiers)
+ internal void ProcessSort(KeyModifiers keyModifiers, ListSortDirection? forcedDirection = null)
{
// if we can sort:
// - AllowUserToSortColumns and CanSort are true, and
@@ -259,7 +259,14 @@ namespace Avalonia.Controls
{
if (sort != null)
{
- newSort = sort.SwitchSortDirection();
+ if (forcedDirection == null || sort.Direction != forcedDirection)
+ {
+ newSort = sort.SwitchSortDirection();
+ }
+ else
+ {
+ newSort = sort;
+ }
// changing direction should not affect sort order, so we replace this column's
// sort description instead of just adding it to the end of the collection
@@ -276,7 +283,10 @@ namespace Avalonia.Controls
}
else if (OwningColumn.CustomSortComparer != null)
{
- newSort = DataGridSortDescription.FromComparer(OwningColumn.CustomSortComparer);
+ newSort = forcedDirection != null ?
+ DataGridSortDescription.FromComparer(OwningColumn.CustomSortComparer, forcedDirection.Value) :
+ DataGridSortDescription.FromComparer(OwningColumn.CustomSortComparer);
+
owningGrid.DataConnection.SortDescriptions.Add(newSort);
}
@@ -290,6 +300,10 @@ namespace Avalonia.Controls
}
newSort = DataGridSortDescription.FromPath(propertyName, culture: collectionView.Culture);
+ if (forcedDirection != null && newSort.Direction != forcedDirection)
+ {
+ newSort = newSort.SwitchSortDirection();
+ }
owningGrid.DataConnection.SortDescriptions.Add(newSort);
}
From d138924a95527bc55908a3b7374e9ec1517797d9 Mon Sep 17 00:00:00 2001
From: 0x90d <46010672+0x90d@users.noreply.github.com>
Date: Fri, 15 Oct 2021 05:35:55 +0200
Subject: [PATCH 3/5] Update DataGridColumn.cs
---
src/Avalonia.Controls.DataGrid/DataGridColumn.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
index 07adac597f..7ad06c194d 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
@@ -657,10 +657,10 @@ namespace Avalonia.Controls
/// Switches the current state of sort direction
///
/// Clear the current sort direction instead
- public void PerformSort(bool clear)
+ public void PerformSort(bool? clear)
{
//InvokeProcessSort is already validating if sorting is possible
- _headerCell?.InvokeProcessSort(clear ? Input.KeyModifiers.Control : Input.KeyModifiers.None);
+ _headerCell?.InvokeProcessSort(clear == true ? Input.KeyModifiers.Control : Input.KeyModifiers.None);
}
///
From e564a01663c1d538329f2052c1718063d696fc01 Mon Sep 17 00:00:00 2001
From: 0x90d <46010672+0x90d@users.noreply.github.com>
Date: Fri, 15 Oct 2021 06:36:07 +0200
Subject: [PATCH 4/5] Update DataGridColumn.cs
---
src/Avalonia.Controls.DataGrid/DataGridColumn.cs | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
index 7ad06c194d..f275d7cc94 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
@@ -653,21 +653,29 @@ namespace Avalonia.Controls
return null;
}
+ ///
+ /// Clears the current sort direction
+ ///
+ public void ClearSort()
+ {
+ //InvokeProcessSort is already validating if sorting is possible
+ _headerCell?.InvokeProcessSort(Input.KeyModifiers.Control);
+ }
+
///
/// Switches the current state of sort direction
///
- /// Clear the current sort direction instead
- public void PerformSort(bool? clear)
+ public void Sort()
{
//InvokeProcessSort is already validating if sorting is possible
- _headerCell?.InvokeProcessSort(clear == true ? Input.KeyModifiers.Control : Input.KeyModifiers.None);
+ _headerCell?.InvokeProcessSort(Input.KeyModifiers.None);
}
///
/// Changes the sort direction of this column
///
/// New sort direction
- public void PerformSort(ListSortDirection direction)
+ public void Sort(ListSortDirection direction)
{
//InvokeProcessSort is already validating if sorting is possible
_headerCell?.InvokeProcessSort(Input.KeyModifiers.None, direction);
From f6406cecf0d4f39d829f2fb192eff03ade26b50f Mon Sep 17 00:00:00 2001
From: 0x90d <46010672+0x90d@users.noreply.github.com>
Date: Fri, 15 Oct 2021 06:47:09 +0200
Subject: [PATCH 5/5] Update DataGridColumn.cs
---
src/Avalonia.Controls.DataGrid/DataGridColumn.cs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
index f275d7cc94..5499257171 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
@@ -9,6 +9,7 @@ using Avalonia.VisualTree;
using Avalonia.Collections;
using Avalonia.Utilities;
using System;
+using System.ComponentModel;
using System.Linq;
using System.Diagnostics;
using Avalonia.Controls.Utils;