Взяв исходный код из 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);
}
}
И, согласно Microsoft, у вас должны быть элементы группы, наследующие 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, он знает, чтобы создать GroupList GroupItems. а элементы управления UWP ListView и Semanti c работают просто отлично. Пожалуйста, дайте мне знать, если у вас есть что добавить к этому или corections