27 lines
996 B
C#
27 lines
996 B
C#
using Avalonia.Controls;
|
|
using LibationUiBase.GridView;
|
|
using System.ComponentModel;
|
|
using System.Reflection;
|
|
|
|
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; init; }
|
|
public override string PropertyName { get; set; }
|
|
|
|
public RowComparer(DataGridColumn column)
|
|
{
|
|
Column = column;
|
|
PropertyName = Column.SortMemberPath;
|
|
}
|
|
|
|
//Avalonia doesn't expose the column's CurrentSortingState, so we must get it through reflection
|
|
protected override ListSortDirection? GetSortOrder()
|
|
=> CurrentSortingStatePi.GetValue(HeaderCellPi.GetValue(Column)) as ListSortDirection?;
|
|
}
|
|
}
|