Правильный способ сортировки GridView или его поддерживающей ObservableCollection?

Недавно я писал хобби-проект по WinUI 3 и столкнулся с некоторыми проблемами.

В моем приложении у меня есть файл, привязанный в XAML к файлу, как рекомендовано в документации WinUI. Это отлично работает, но теперь мне нужно иметь возможность сортировать и фильтровать элементы в, и неясно, какой из них наиболее «правильный» или идиоматический.

Поиск в Google показывает, что у WPF есть кое-что в чтобы справиться с этим, но они, похоже, были удалены в WinUI.

В настоящее время я обнаружил, что единственное, что работает, - это удалить привязку XAML, изменить в a, а затем, когда пользователь выполняет сортировку, вручную установите для источника значение с последующим установлением в качестве источника отсортированной версии файла . Если не ошибаюсь, это ломает виртуализацию в хотя, так что это не похоже на то, что я должен делать.

Я был бы очень признателен за любое понимание этого.

2 ответа

В WinUI вы должны сортировать исходную коллекцию, т.е. ObservableCollection<T>, самим собой.

Это модифицированный (и довольно непроверенный) BubbleSortметод отсюда , который должен пригодиться:

      public static class ObservableCollectionExtensions
{
    public static void BubbleSort<T>(this ObservableCollection<T> o) where T : IComparable
    {
        for (int i = o.Count - 1; i >= 0; i--)
            for (int j = 1; j <= i; j++)
            {
                IComparable o1 = o[j - 1];
                IComparable o2 = o[j];
                if (o1.CompareTo(o2) > 0)
                    o.Move(j - 1, j);
            }
    }
}

Использование: :

      someObservableCollection.BubbleSort();

Я не уверен, что этот метод сортировки UWP полностью совместим с WinUI 3, поскольку я его не пробовал. Но в примере заказов Contoso https://github.com/microsoft/Windows-appsample-customers-orders-database есть пример кода, который изменяет Datagrid, когда событие сортировки запускается из Datagrid. Обратитесь к DataGridHelper в папке Views.

Другие вопросы по тегам