Having the following code:
<telerik:RadCollectionView
x:Name="configurationsCollectionView"
BackgroundColor="Green"
ItemsSource="{Binding Configurations}">
<telerik:RadCollectionView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label
Grid.Column="0"
BackgroundColor="Blue"
Text="Test 123" />
<Label
Grid.Column="1"
BackgroundColor="Red"
Text="Test 456" />
</Grid>
</DataTemplate>
</telerik:RadCollectionView.ItemTemplate>
</telerik:RadCollectionView>when rotating the device, the control does not size correctly its item template
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?
Hello,
The CollectionView has a HeaderTemplate and a FooterTemplate. When using grouping, there is a GroupHeaderTemplate but no GroupFooterTemplate (like the default MAUI CollectionView has).
Can the GroupFooterTemplate be added to the CollectionView control?
Thanks!
I see iOS crashes in Sentry, seems like caused by clearing the RadCollectionView bound DataSource ObservableCollection, when an item was previously selected
Maui 9.0.70
Telerik 11.0
System.NullReferenceException: Arg_NullReferenceException
?, in void RadCollectionViewItemView.OnIsSelectedChanged()
?, in static RadCollectionViewItemView()+(BindableObject b, object o, object n) => { }
?, in void BindableObject.OnBindablePropertySet(BindableProperty property, object original, object value, bool didChange, bool willFirePropertyChanged)
?, in void Element.OnBindablePropertySet(BindableProperty property, object original, object value, bool changed, bool willFirePropertyChanged)
?, in void BindableObject.SetValueActual(BindableProperty property, BindablePropertyContext context, object value, bool currentlyApplying, SetValueFlags attributes, SetterSpecificity specificity, bool silent)
?, in void BindableObject.SetValueCore(BindableProperty property, object value, SetValueFlags attributes, SetValuePrivateFlags privateAttributes, SetterSpecificity specificity)
?, in void BindableObject.SetValue(BindableProperty property, object value)
?, in void RadCollectionViewItemView.set_IsSelected(bool value)
?, in void RadCollectionView.SelectContainers(IEnumerable items, bool select)
?, in void RadCollectionView.SelectionHelperSelectionChanged(object sender, RadSelectionChangedEventArgs e)
?, in void <>c__DisplayClass36_0.<SelectionChangerSelectionChanged>b__0(?)+() => { }
?, in void ActiveSelectionScope.Dispose()
?, in void SelectionHelper.ClearSelection()
?, in void RadCollectionView.Telerik.Maui.Controls.ICollectionView.ItemsChanged(NotifyCollectionChangedEventArgs e)
?, in void CollectionViewModel.OnDataProviderViewChanged(object sender, ViewChangedEventArgs e)
?, in void DataProviderBase.RaiseViewChanged(object sender, List<AddRemoveResult> changes, NotifyCollectionChangedEventArgs args, CollectionChange action, bool affectsAggregates)
?, in void LocalDataSourceProvider.ProcessCollectionChanged(NotifyCollectionChangedEventArgs e)
?, in void LocalDataSourceProvider.DataView_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
?, in void EnumerableDataSourceView.RaiseCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)
?, in void EnumerableDataSourceView.ProcessCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
?, in void EnumerableDataSourceView.ProcessCollectionChangedOverride(object sender, NotifyCollectionChangedEventArgs args)
?, in void EnumerableDataSourceView.ProcessPendingCollectionChange()
?, in void DataProviderBase.RaiseViewChanging(object sender, IList changedItems, CollectionChange action)
?, in void LocalDataSourceProvider.DataView_CollectionChanging(object sender, NotifyCollectionChangedEventArgs e)
?, in void EnumerableDataSourceView.HandleCollectionChangedOverride(object sender, NotifyCollectionChangedEventArgs e)
?, in void EnumerableDataSourceView.Telerik.Maui.IWeakEventListener.ReceiveEvent(object sender, object args)
?, in void WeakEventHandlerList<NotifyCollectionChangedEventArgs>.ProcessEvent(object sender, object args)
?, in void WeakEventHandlerList<NotifyCollectionChangedEventArgs>.OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
?, in void ObservableCollection<ViewBundle>.OnCollectionChanged(NotifyCollectionChangedEventArgs)
?, in void ExtObservableCollection<ViewBundle>.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
?, in void ObservableCollection<ViewBundle>.OnCollectionReset()
?, in void ObservableCollection<ViewBundle>.ClearItems()
?, in void ExtObservableCollection<ViewBundle>.ClearItems()
?, in void Collection<ViewBundle>.Clear()
?, in void SearchViewViewModel.Dispose(bool disposing)
?, in void PropertyChangedNotifyingBase.Dispose()
?, in async void ViewBundle.Dispose(bool disposing)
?, in void <>c.<ThrowAsync>b__128_0(?)+(object state) => { }
?, in void NSAsyncSynchronizationContextDispatcher.Apply()
?, in void __Registrar_Callbacks__.callback_3311_Foundation_NSAsyncSynchronizationContextDispatcher_Apply(IntPtr pobj, IntPtr sel, IntPtr* exception_gchandle)
When having a CollectionView and navigating between different views when tapping on an item from the CollectionView, the item(s) look(s) selected.
It seems the behavior is due to the mouse over and selected visual states.
When collapsing all groups, the footer still keeps bottom position and does not align with the groups.
In RadListView, the footer is aligned to the groups when they are collapsed. Please provide such option for the CollectionView.
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.
Provide support for right-to-left flow direction:
The current behavior is that the items
when the device language is set to an RTL language (like Hebrew or Arabic) causing the FlowDirection to be set to RightToLeft, where UI will show correctly with RTL FlowDirection, but the item's corresponding tap areas are still in the LTR positions.