|
|
@@ -1,8 +1,12 @@
|
|
|
+using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.ComponentModel;
|
|
|
+using System.Linq;
|
|
|
using Avalonia.Controls;
|
|
|
using Avalonia.Markup.Xaml;
|
|
|
using ControlCatalog.Models;
|
|
|
using Avalonia.Collections;
|
|
|
+using Avalonia.Data;
|
|
|
|
|
|
namespace ControlCatalog.Pages
|
|
|
{
|
|
|
@@ -11,13 +15,23 @@ namespace ControlCatalog.Pages
|
|
|
public DataGridPage()
|
|
|
{
|
|
|
this.InitializeComponent();
|
|
|
+
|
|
|
+ var dataGridSortDescription = DataGridSortDescription.FromPath(nameof(Country.Region), ListSortDirection.Ascending, new ReversedStringComparer());
|
|
|
+ var colelctionView1 = new DataGridCollectionView(Countries.All);
|
|
|
+ colelctionView1.SortDescriptions.Add(dataGridSortDescription);
|
|
|
var dg1 = this.FindControl<DataGrid>("dataGrid1");
|
|
|
dg1.IsReadOnly = true;
|
|
|
dg1.LoadingRow += Dg1_LoadingRow;
|
|
|
- var collectionView1 = new DataGridCollectionView(Countries.All);
|
|
|
- //collectionView.GroupDescriptions.Add(new PathGroupDescription("Region"));
|
|
|
-
|
|
|
- dg1.Items = collectionView1;
|
|
|
+ dg1.Sorting += (s, a) =>
|
|
|
+ {
|
|
|
+ var property = ((a.Column as DataGridBoundColumn)?.Binding as Binding).Path;
|
|
|
+ if (property == dataGridSortDescription.PropertyPath
|
|
|
+ && !colelctionView1.SortDescriptions.Contains(dataGridSortDescription))
|
|
|
+ {
|
|
|
+ colelctionView1.SortDescriptions.Add(dataGridSortDescription);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ dg1.Items = colelctionView1;
|
|
|
|
|
|
var dg2 = this.FindControl<DataGrid>("dataGridGrouping");
|
|
|
dg2.IsReadOnly = true;
|
|
|
@@ -53,5 +67,20 @@ namespace ControlCatalog.Pages
|
|
|
{
|
|
|
AvaloniaXamlLoader.Load(this);
|
|
|
}
|
|
|
+
|
|
|
+ private class ReversedStringComparer : IComparer<object>, IComparer
|
|
|
+ {
|
|
|
+ public int Compare(object x, object y)
|
|
|
+ {
|
|
|
+ if (x is string left && y is string right)
|
|
|
+ {
|
|
|
+ var reversedLeft = new string(left.Reverse().ToArray());
|
|
|
+ var reversedRight = new string(right.Reverse().ToArray());
|
|
|
+ return reversedLeft.CompareTo(reversedRight);
|
|
|
+ }
|
|
|
+
|
|
|
+ return Comparer.Default.Compare(x, y);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|