0

我最近一直在用 WinUI 3 编写一个爱好项目,但遇到了一些麻烦。

在我的应用程序中,按照 WinUI 文档中的建议,我有一个GridView在 XAML 中绑定到 的。ObservableCollection这很好用,但现在我需要能够对其中的项目进行排序和过滤,GridView目前还不清楚最“正确”或最惯用的方式是什么。

谷歌搜索显示 WPF 有一些CollectionViewSource处理此问题的部分,但这些部分似乎已在 WinUI 中删除。

目前,我发现唯一可行的方法是删除 XAML 绑定,将 更改ObservableCollection为 a List,然后当用户排序时,手动将GridView' 源设置为,null然后将源设置为List. 如果我没记错的话,这会破坏虚拟化GridView,所以这似乎不是我应该做的。

我将不胜感激对此的任何见解。

4

2 回答 2

0

我不确定这种 UWP 排序方法是否与 WinUI 3 完全兼容,因为我没有尝试过。但是 Contoso 订单示例https://github.com/microsoft/Windows-appsample-customers-orders-database有一些示例代码可以在从 Datagrid 触发排序事件时更改 Datagrid。请参阅 Views 文件夹中的 DataGridHelper。

于 2021-12-11T10:20:23.153 回答
0

在 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();
于 2021-12-10T15:14:29.337 回答