After upgrading from Telerik UI for .NET MAUI 13.0.0 → 13.2.0, a NullReferenceException is thrown inside SchedulerAgendaView.Init() on Windows (WinUI3) whenever a RadScheduler with an AgendaViewDefinition is used. The scheduler never renders and the app receives an unhandled exception.
Steps to Reproduce:
ContentPage (or any page) with a RadScheduler in XAML, including at least one AgendaViewDefinition in ViewDefinitions:<telerik:RadScheduler AppointmentsSource="{Binding Appointments}">
<telerik:RadScheduler.ViewDefinitions>
<telerik:AgendaViewDefinition />
<telerik:DayViewDefinition />
</telerik:RadScheduler.ViewDefinitions>
</telerik:RadScheduler>
Expected Behavior:
The scheduler renders correctly with the AgendaViewDefinition, as it did in 13.0.0.
Actual Behavior:
An unhandled NullReferenceException is thrown:
System.NullReferenceException: Object reference not set to an instance of an object.
at Telerik.Maui.Controls.Scheduler.SchedulerAgendaView.Init()
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__124_0(Object state)
at Microsoft.UI.Dispatching.DispatcherQueueSynchronizationContext.<>c__DisplayClass2_0.<Post>b__0()
Root Cause Analysis (via ILSpy decompilation):
Comparing the decompiled assemblies of 13.0.0 and 13.2.0 reveals a new override in RadScheduler introduced in 13.2.0:
// NEW in 13.2.0 — not present in 13.0.0:
protected override void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
base.OnPropertyChanged(propertyName);
if (propertyName == "Parent" && Parent != null && !IsLoaded)
UpdateActiveViewDefinition();
}
This causes the following call chain to be triggered during InitializeComponent() in the page constructor — before the page is attached to a window:
RadScheduler to the page → Parent property changesOnPropertyChanged("Parent") fires → UpdateActiveViewDefinition() is calledActiveViewDefinition = ViewDefinitions[0] (the AgendaViewDefinition)OnActiveViewDefinitionChanged() → content.Rebuild() (template already applied on WinUI3)SchedulerAgendaView.Model setter → Init() is called as async voidInit(), after the first await, the continuation runs and DataBindingComplete firescompleteHandler inside Init() calls:((BindableObject)this).Dispatcher.Dispatch(async delegate { ... });
Dispatcher is null because the SchedulerAgendaView is not yet attached to a window → NullReferenceExceptionThe exception is captured by the async void state machine and re-thrown via SynchronizationContext.ThrowAsync → DispatcherQueueSynchronizationContext.Post, which matches the observed stack trace exactly.
Why it worked in 13.0.0: UpdateActiveViewDefinition() was never called from OnPropertyChanged. It was only invoked after IsLoaded = true, at which point Dispatcher is guaranteed to be non-null.
Why the condition !IsLoaded is insufficient: Parent != null does not imply a window is present. During InitializeComponent(), the element has a parent in the logical tree but is not yet attached to any Window, making Dispatcher null on BindableObject.
Workaround:
Do not declare ViewDefinitions in XAML. Instead, add them programmatically in the page's Loaded event handler, at which point Dispatcher is guaranteed to be available:
private void OnPageLoaded(object sender, EventArgs e)
{
if (scheduler.ViewDefinitions.Count == 0)
{
scheduler.ViewDefinitions.Add(new AgendaViewDefinition());
scheduler.ViewDefinitions.Add(new DayViewDefinition());
scheduler.ViewDefinitions.Add(new WeekViewDefinition());
scheduler.ViewDefinitions.Add(new MonthViewDefinition());
}
}
Suggested Fix:
Either:
Option A — Guard Dispatcher usage inside SchedulerAgendaView.Init():
// In completeHandler, before calling Dispatch:
if (((BindableObject)this).Dispatcher is { } dispatcher)
dispatcher.Dispatch(...);
Option B — Guard UpdateActiveViewDefinition() in RadScheduler.OnPropertyChanged to only run when content (the internal RadSchedulerContent) has already been set (i.e., template was applied):
if (propertyName == "Parent" && Parent != null && !IsLoaded && content != null)
UpdateActiveViewDefinition();
Option B is more conservative and closer to the original 13.0.0 behavior, since content being non-null implies the template has been applied and Dispatcher is available.
Environment:
| Telerik UI for .NET MAUI | 13.2.0 (regression from 13.0.0) |
| .NET | .NET 10 |
| Platform | Windows (WinUI3) |
| MAUI | 10.0.60 |
After upgrading to .NET MAUI 10.0.60, the app crashes on Windows with an unhandled exception when RadCollectionView renders items that use a ControlTemplate containing a RadBorder.
Exception:
System.Exception: Keine installierten Komponenten gefunden. (REGDB_E_CLASSNOTREG)
at ABI.System.Collections.Generic.IListMethods`2.AppendDynamic(...)
at Microsoft.UI.Xaml.Controls.UIElementCollection.Add(UIElement item)
at Telerik.Maui.RadBorderExtensions.UpdateBorderContent(Border nativeBorder, IRadBorder border)
at Telerik.Maui.Handlers.RadBorderHandler.MapContent(...)
at Telerik.Maui.Controls.RadCollectionViewItemView.OnStyleChanged()
...
Root Cause:
MAUI PR #30047 introduced a call to view.Handler?.DisconnectHandler() inside ContentViewHandler.UpdateContent (Windows-only) before re-adding the content to the native panel. This disconnects and invalidates Telerik's RadBorderHandler WinRT object references. When RadBorderExtensions.UpdateBorderContent subsequently calls UIElementCollection.Add, the WinRT interop throws the COM error.
Steps to reproduce:
RadCollectionView with an ItemTemplate or ControlTemplate that contains a RadBorderExpected: Collection renders correctly.
Actual: App crashes with REGDB_E_CLASSNOTREG.
Versions:
Workaround:
Replacing the default ContentViewHandler mapping with a custom implementation that calls platformView.RemoveFromParent() on the native view instead of DisconnectHandler() on the virtual view avoids the crash.
from 11.1.0 version and above the behavior of dropping item changes for my custom scenario.
I have two CollectionView's. one on left has inner collectionview, and one on right. When the inner collectionview has no items, dropping item from the right collectionview to the collectionview with no data cannot be achieved.
The height of the inner collectionview with no items is 0.
This works in 11.0.0 version but after 11.1.0 the behavior changes and item cannot be dropped.
when having a document with a text fragment with a transparency, the transparency is not respected. the full color is displayed.
Items do not display after scrolling, navigating to another page, and returning to the page.
You have to scroll or resize the window and the items appear
having a combobox inside the collectionview, click on the combo to open, then click again on the same location where you clicked to open the combo and exception occurs.
this is the stack trace:
at WinRT.ExceptionHelpers.<ThrowExceptionForHR>g__Throw|38_0(Int32 hr)
at ABI.Microsoft.UI.Input.IGestureRecognizerMethods.ProcessDownEvent(IObjectReference _obj, PointerPoint value)
at Microsoft.UI.Input.GestureRecognizer.ProcessDownEvent(PointerPoint value)
at Telerik.Maui.NativeGestureRecognizer.HoldGestureRecognizer_PointerPressed(Object sender, PointerRoutedEventArgs e)
at ABI.Microsoft.UI.Xaml.Input.PointerEventHandler.Do_Abi_Invoke(IntPtr thisPtr, IntPtr sender, IntPtr e)
having a datagrid with columns and setting the celleditor style to text column, then setting SelectionOnFocus to some value, then enter the edit mode, for example select all or cursor at start do not apply., always cursor at end applies.
The behavior also happens when using CellEditTemplate and there is RadEntry in it. The SelectionOnFocus does not apply.
To have a real alternative for wpf, the scheduler should support timeline view. Not for the mobile, but for tablet and browser applications.
In my application i have the resources on the left and de timeline on the top. This is neccesary to migrate to MAUI and be later to Uno or whatsoever
When setting the IsLooping property to "False" through SpinnerStyle property, the infinite looping while scrolling is not disabled.
<ContentPage.Resources>
<Style TargetType="telerik:RadSpinner" x:Key="spinnerStyle">
<Setter Property="IsLooping" Value="False" />
</Style>
</ContentPage.Resources>
<VerticalStackLayout WidthRequest="300" HorizontalOptions="Center">
<telerik:RadDateTimePicker x:Name="dateTimePicker"
SpinnerStyle="{StaticResource spinnerStyle}"
MinimumDate="2020/01/01"
MaximumDate="2026/12/31" />
</VerticalStackLayout>