30 lines
1.1 KiB
C#
30 lines
1.1 KiB
C#
using Avalonia.Controls;
|
|
using LibationUiBase.GridView;
|
|
using System.ComponentModel;
|
|
using System.Reflection;
|
|
|
|
#nullable enable
|
|
namespace LibationAvalonia.ViewModels
|
|
{
|
|
internal class RowComparer : RowComparerBase
|
|
{
|
|
private static readonly PropertyInfo? HeaderCellPi = typeof(DataGridColumn).GetProperty("HeaderCell", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
private static readonly PropertyInfo? CurrentSortingStatePi = typeof(DataGridColumnHeader).GetProperty("CurrentSortingState", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
|
|
private DataGridColumn? Column { get; }
|
|
public override string? PropertyName { get; set; }
|
|
|
|
public RowComparer(DataGridColumn? column)
|
|
{
|
|
Column = column;
|
|
PropertyName = Column?.SortMemberPath ?? nameof(IGridEntry.DateAdded);
|
|
}
|
|
|
|
//Avalonia doesn't expose the column's CurrentSortingState, so we must get it through reflection
|
|
protected override ListSortDirection GetSortOrder()
|
|
=> Column is null ? ListSortDirection.Descending
|
|
: CurrentSortingStatePi?.GetValue(HeaderCellPi?.GetValue(Column)) is ListSortDirection lsd ? lsd
|
|
: ListSortDirection.Descending;
|
|
}
|
|
}
|