Unplanned
Last Updated: 13 Nov 2024 15:54 by Didi

Currently, the LoadOnDemandCollection accepts a callback of the following format in the constructor:

public LoadOnDemandCollection(Func<CancellationToken, IEnumerable> action)

It is a very common scenario to populate the items asynchronously. In its current form the collection would require blocking the current thread to populate the results:

ItemsSource = new LoadOnDemandCollection((cancelationToken) =>
{
    var result = new List<ItemsModel>();
    try
    {
        var items = dataService.GetItemsAsync().Result;

        // TODO: Handle the result.

        return result;
    }
    catch (Exception e)
    {
        // TODO: Handle the exception.
        return null;
    }
});

 

This is not desired, as using Task.Result blocks the current thread and is considered an anti-pattern, in general.

A better approach would be to add a second overload of the constructor, allowing asynchronous calls:

public LoadOnDemandCollection(Func<CancellationToken, Task<IEnumerable>> action)

This way we can use async and await in the callback instead:

ItemsSource = new LoadOnDemandCollection(async (cancelationToken) =>
{
    var result = new List<ItemsModel>();
    try
    {
        var items = await dataService.GetItemsAsync();

        // TODO: Handle the result.

        return result;
    }
    catch (Exception e)
    {
        // TODO: Handle the exception.
        return null;
    }
});

According to my tests, the first blocking approach is not a problem, as the LoadOnDemandCollection starts a thread internally. That behavior is not obvious however, and using Task.Result is somewhat counterintuitive, so the second approach is much better from the user's perspective.

Unplanned
Last Updated: 05 Feb 2026 08:29 by ADMIN
When having swipe and tap gestures and building on Samsung device with android 13 the swipe gesture is with higher priority. the sensitivity of swipe is very high, resulting in not recognizing the tap.
Unplanned
Last Updated: 28 Jan 2025 09:01 by ADMIN
When scrolling to the last item using the ScrollITemIntoVIew() method to show the last item of a CollectionView, It doesn't scroll to the end of the list and only show the first pixels of the last item.
Unplanned
Last Updated: 18 Jul 2025 07:02 by ADMIN
CollectionView item swipe doesn't work.
Completed
Last Updated: 04 Apr 2025 09:50 by ADMIN
Release 10.1.0

1. Bind the CheckedItems collection of the TreeView to the CollectionView ItemsSource.

2. there aren't any items in the TreeView initially.  Add items to it

3. Start checking the checkboxes

4. The items are added to the CollectionView, still they are not visible in the control.

 

Completed
Last Updated: 04 Apr 2025 09:50 by ADMIN
Release 10.1.0
When removing items from the collection's item source, the group header item count does not update real time. It only updates when the GroupContext is collapsed or expanded. This would also be an issue if items are added dynamically.
Completed
Last Updated: 04 Apr 2025 09:50 by ADMIN
Release 10.1.0
There is a memory leak in the CollectionView on iOS/MacCatalyst - when the CollectionView control is on the page, the page does not dispose when GC runs. Same behavior happens with the RadListview.
Unplanned
Last Updated: 14 Oct 2024 18:57 by Alan

Currently the group descriptors provide a SortOrder property, so the groups are sorted alphabetically in descending or ascending order.  We would need to cover the following scenarios:

- allow certain groups to be ordered at the top, possibly by specifying an comparer or a separate group sort property.

- show the groups in order the corresponding items appear in the ItemsSource.

Unplanned
Last Updated: 13 Nov 2024 15:55 by Didi
Implement alternating item styles for CollectionView.
Unplanned
Last Updated: 22 Nov 2024 08:07 by Mauricio
Created by: Mauricio
Comments: 0
Category: CollectionView
Type: Feature Request
1
Provide a pressed visual state.
Unplanned
Last Updated: 21 Jan 2025 05:51 by ADMIN

The ItemsSource of the views is populated in the ViewModel of the page. This is done in a command that is triggered by the NavigatedTo event of the page, which is forwarded via EventToCommandBehavior from the Maui Toolkit.

When using the RadCollectionView the loaded items are no longer displayed. 

When the ObservableCollection of the items is completely reconstructed and reassigned the display works.

Unplanned
Last Updated: 14 Apr 2025 11:35 by Stephen

Provide a built it way to notify the parent group when the items in the nested groups are changed. 

For example, there is no PropertyChanged or CollectionChanged notification that we can hook in to in order to detect updates in parent group headers when the count changes in a subgroup. Only the leaf group headers get updated, but not the parents.

 

Completed
Last Updated: 21 May 2025 08:09 by ADMIN
Release 11.0.0 (2025 Q2)
Null Ref Exception occurs when calling ScrollItemIntoView at the time when navigating away from the page. 
Completed
Last Updated: 13 Aug 2025 08:35 by ADMIN
Release 11.1.0 (2025 Q3)
Created by: Didi
Comments: 1
Category: CollectionView
Type: Feature Request
1
Add support for sticky group headers for desktop - WinUI and MacCatalyst. 
Completed
Last Updated: 09 Jul 2025 12:43 by ADMIN
Release 11.0.1
When the client picks a random item from the ItemSource and changes the value of its property for which a GroupDescriptor is set, the CollectionView crashes.
Completed
Last Updated: 09 Jul 2025 12:43 by ADMIN
Release 11.0.1
When the CollectionView is grouped and an element is removed from the source collection and inserted again immediately after that, it results in its parent group not expanding/collapsing when tapped. The tap is registered and the visual indicator of the group state is changed but the group is not actually collapsing and expanding. This issue is happening for groups with only one child item. When scrolling so the group gets our of the visible area and then scroll to the group again, the collapse/expand functionality works.
Unplanned
Last Updated: 30 Jun 2025 12:13 by Stephen
A scenario with a requirement to display information about the entire group, including recursively all child groups, needs access to the actual items and/or subgroups. Exposing these and parent info would allow for greater flexibility in displaying custom information in group headers.
Declined
Last Updated: 13 Oct 2025 11:46 by ADMIN
Created by: axp
Comments: 4
Category: CollectionView
Type: Bug Report
1
  1. Unexpected indent at the right, Android/iOS.
  2. iOS only issue - width of CollectionView content continuously changes during scroll - to fill that ident and back.
Under Review
Last Updated: 02 Feb 2026 07:41 by ADMIN
Created by: Luis
Comments: 1
Category: CollectionView
Type: Bug Report
1

We've got a CollectionView which shows a list of grouped items (grouping can be by date or other values - but date is the default).

The CollectionView items source is bound to an observable collection, and when the viewmodel saw an item removed from the observable collection, the Telerik control crashed.  We've seen instances of this app crash on Android (the same control hasn't been released to other platforms yet). We do not have reproduction steps as this is a rare issue, but it feels like it is worth communicating as you might be able to spot what is going on from your end.

System.ArgumentException: Arg_MustBeDateTime
  at int DateTime.CompareTo(object value)()
  at int Comparer.Compare(object a, object b)()
  at int SortFieldComparer.Compare(object o1, object o2)()
  at int ArraySortHelper<object>.InternalBinarySearch(object[], int, int, object, IComparer<object>)()
  at int ArraySortHelper<object>.BinarySearch(object[], int, int, object, IComparer<object>)()
System.InvalidOperationException: InvalidOperation_IComparerFailed
  at int ArraySortHelper<object>.BinarySearch(object[], int, int, object, IComparer<object>)()
  at int Array.BinarySearch<object>(object[] array, int index, int length, object value, IComparer<object> comparer)()
  at int List<object>.BinarySearch(int, int, object, IComparer<object>) x 2()
  at int Group.IndexOf(object item, IComparer<object> sortComparer)()
  at Tuple<Group, int> ParallelDataEngine.FindGroupAndItemIndex(IValueProvider valueProvider, Group rowRootGroup, object item, int index, bool exhaustiveSearch, bool canUseComparer)()
  at AddRemoveItemResult ParallelDataEngine.RemoveItem(IAggregateResultProvider aggregateResultProvider, IValueProvider valueProvider, Group rowRootGroup, Group columnRootGroup, object item, int index, bool exhaustiveSearch, bool canUseComparer)()
  at List<AddRemoveResult> ParallelDataEngine.Process(int index, IEnumerable items, bool remove, bool removeFilteredItem, bool canUseComparer)()
  at List<AddRemoveResult> ParallelDataEngine.Telerik.Maui.Data.IDataEngine.RemoveItems(int index, IEnumerable items, bool removeFilteredItem, bool canUseComparer)()
  at List<AddRemoveResult> LocalDataSourceProvider.RemoveItems(int oldStartingIndex, IList oldItems, NotifyCollectionChangedEventArgs e, bool doExhaustiveSearch, bool canUseComparer)()
  at void LocalDataSourceProvider.ProcessCollectionChanged(NotifyCollectionChangedEventArgs e)()
  at void LocalDataSourceProvider.DataView_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)()
  at void EnumerableDataSourceView.RaiseCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)()
  at void EnumerableDataSourceView.ProcessCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)()
  at void EnumerableDataSourceView.ProcessCollectionChangedOverride(object sender, NotifyCollectionChangedEventArgs args)()
  at void EnumerableDataSourceView.ProcessPendingCollectionChange()()
  at void DataProviderBase.RaiseViewChanging(object sender, IList changedItems, CollectionChange action)()
  at void LocalDataSourceProvider.DataView_CollectionChanging(object sender, NotifyCollectionChangedEventArgs e)()
  at void EnumerableDataSourceView.RaiseCollectionChanging(object sender, NotifyCollectionChangedEventArgs args)()
  at void EnumerableDataSourceView.HandleCollectionChangedOverride(object sender, NotifyCollectionChangedEventArgs e)()
  at void EnumerableDataSourceView.Telerik.Maui.IWeakEventListener.ReceiveEvent(object sender, object args)()
  at void WeakEventHandlerList<NotifyCollectionChangedEventArgs>.ProcessEvent(object sender, object args)()
  at void WeakEventHandlerList<NotifyCollectionChangedEventArgs>.OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)()
  at void ObservableCollection<IWorkItemListItem>.OnCollectionChanged(NotifyCollectionChangedEventArgs) x 2()
  at void ObservableCollection<IWorkItemListItem>.RemoveItem(int)()
  at bool Collection<IWorkItemListItem>.Remove(IWorkItemListItem)()

any ideas on what might be going on here?

Completed
Last Updated: 07 Aug 2024 08:29 by ADMIN
Release 7.1.0 (2024 Q3)
Created by: Angus
Comments: 2
Category: CollectionView
Type: Feature Request
0
Provide an option to define header and footer templates