为实现分组的UWP XAML创建自定义ICollectionView对象



我需要这样的东西:AdvancedCollectionViewControl,它来自UWP社区工具包,我可以让它为自定义ICollectionView工作,除非它们没有实现Grouping。

我需要一个执行筛选、排序和分组的ICollectionView,这样我就可以将它绑定到一个执行分组并具有SemanticZoom控件的UWP ListView。这在UWP 中不存在

我如何以UWP工具包为例,让"public IObservableVector CollectionGroups"属性发挥作用,以便进行分组?我只会使用CollectionViewSource,除非我需要添加排序和筛选功能。

该文档规定,对将存储在IObservableVector CollectionGroups属性中的项使用ICollectionViewGroup接口;我找不到任何例子,也找不到如何实现它。以下是Microsoft的所有文档:https://learn.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Data.ICollectionViewGroup?view=winrt-18362

简单地说,我需要一个关于如何使用分组实现ICollectionView接口的示例。如果你不知道如何做到这一点,请不要发表评论。

从UWP Toolkit AdvancedCollectionObject中获取源代码,我在大量尝试和错误的基础上添加了分组。(在网上找不到该怎么做(而且它似乎在起作用。我不知道我做得是否正确,但以下是我必须做的:

对于IObservableVector GroupItems属性,我必须制作自己的List和IVectorChangedEventArgs:

internal class VectorChangedEventArgs : IVectorChangedEventArgs
{
public VectorChangedEventArgs(CollectionChange cc, int index = -1, object item = null)
{
CollectionChange = cc;
Index = (uint)index;
}
public CollectionChange CollectionChange { get; }
public uint Index { get; }
}
public class GroupList<T> : Collection<T>, IObservableVector<T>
{
public event VectorChangedEventHandler<T> VectorChanged;
public GroupList() : base()
{
}
public GroupList(IList<T> list) : base(list)
{
}
protected override void ClearItems()
{
base.ClearItems();
this.OnVectorChanged(new VectorChangedEventArgs(CollectionChange.Reset, 0));
}
protected override void InsertItem(int index, T item)
{
base.InsertItem(index, item);
this.OnVectorChanged(new VectorChangedEventArgs(CollectionChange.ItemInserted, index));
}
protected override void RemoveItem(int index)
{
base.RemoveItem(index);
this.OnVectorChanged(new VectorChangedEventArgs(CollectionChange.ItemRemoved, index));
}
protected override void SetItem(int index, T item)
{
base.SetItem(index, item);
this.OnVectorChanged(new VectorChangedEventArgs(CollectionChange.ItemChanged, index));
}
private void OnVectorChanged(IVectorChangedEventArgs e)
{
VectorChanged?.Invoke(this, e);
}
}

根据微软的说法,你应该让组项目继承ICollectionViewGroup:

public class GroupItem : DependencyObject, ICollectionViewGroup
{
private IGrouping<object, object> _group;
public GroupItem(IGrouping<object, object> group)
{
_group = group;
}
public object Group => _group;
public IObservableVector<object> GroupItems => new GroupList<object>(_group.ToList());
}

现在,当源更改为使用Linq的集合时。IGrouping知道创建GroupItems的GroupList,UWP ListView和Semantic控件工作得很好。请让我知道,如果你有什么要添加到这个或核心的

最新更新