对 GridView 或其支持的 ObservableCollection 进行排序的正确方法?
Correct way to sort GridView or its backing ObservableCollection?
我最近一直在用 WinUI 3 编写一个业余项目,运行 遇到了一些麻烦。
在我的应用程序中,我有一个 GridView
,它按照 WinUI 文档中的建议在 XAML 中绑定到 ObservableCollection
。这很好用,但现在我需要能够对 GridView
中的项目进行排序和过滤,目前还不清楚最“正确”或最惯用的方法是什么。
Google 显示 WPF 在 CollectionViewSource
中有一些位来处理这个问题,但这些似乎已在 WinUI 中删除。
目前我发现唯一可行的方法是删除 XAML 绑定,将 ObservableCollection
更改为 List
,然后在用户排序时手动设置将 GridView
的源设置为 null
,然后将源设置为 List
的排序版本。如果我没记错的话,这会破坏 GridView
中的虚拟化,所以它看起来不像我应该做的。
我将不胜感激任何对此的见解。
在 WinUI 中,您应该自行对源集合进行排序,即 ObservableCollection<T>
。
这是来自 here 的经过修改(并且相当未经测试)的 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 Orders Example https://github.com/microsoft/Windows-appsample-customers-orders-database 有一些示例代码可以在从 Datagrid 触发排序事件时更改 Datagrid。参考Views文件夹中的DataGridHelper。
我最近一直在用 WinUI 3 编写一个业余项目,运行 遇到了一些麻烦。
在我的应用程序中,我有一个 GridView
,它按照 WinUI 文档中的建议在 XAML 中绑定到 ObservableCollection
。这很好用,但现在我需要能够对 GridView
中的项目进行排序和过滤,目前还不清楚最“正确”或最惯用的方法是什么。
Google 显示 WPF 在 CollectionViewSource
中有一些位来处理这个问题,但这些似乎已在 WinUI 中删除。
目前我发现唯一可行的方法是删除 XAML 绑定,将 ObservableCollection
更改为 List
,然后在用户排序时手动设置将 GridView
的源设置为 null
,然后将源设置为 List
的排序版本。如果我没记错的话,这会破坏 GridView
中的虚拟化,所以它看起来不像我应该做的。
我将不胜感激任何对此的见解。
在 WinUI 中,您应该自行对源集合进行排序,即 ObservableCollection<T>
。
这是来自 here 的经过修改(并且相当未经测试)的 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 Orders Example https://github.com/microsoft/Windows-appsample-customers-orders-database 有一些示例代码可以在从 Datagrid 触发排序事件时更改 Datagrid。参考Views文件夹中的DataGridHelper。