Under Review
Last Updated: 18 Nov 2025 11:27 by ADMIN

Hi Team,

We have a large-scale WPF application that uses the Telerik WPF RadGridView across multiple screens. We are experiencing significant memory growth issues. Upon deep analysis of the memory dump, we observed that the RadGridView continuously pushes DispatcherPriority items into the Dispatcher queue. We also noticed an internal timer within the RadGridView that appears to be active even after the control is no longer visible.  We would like to understand how to completely detach and stop this internal timer once the control is removed from the screen, and why the RadGridView keeps pushing DispatcherItem entries into the Dispatcher queue.

 

 

Telerik Version : 2017.2.503.45

 

 

Unplanned
Last Updated: 06 Nov 2025 14:50 by Stenly
Currently, the frozen columns' count will be updated if the dragged splitter passes half of the width of the column on which it is over. We could introduce support for modifying this threshold to either increase it or decrease it.
In Development
Last Updated: 12 Nov 2025 13:29 by ADMIN
TreeListView with IsReadOnly True and EnableColumnVirtualization True.
Custom column is defined in code with IsReadOnly False.
Runtime, user edits a cell from the column and then scrolls horizontally - this leads to UI freeze, endlessly.
Completed
Last Updated: 11 Nov 2025 08:11 by ADMIN
Release Telerik UI for WPF 2025.4.1111 (2025 Q4)
When the culture is set to th-TH (Thai culture), an ArgumentOutOfRangeException is raised when the ItemsSource of RadGridView is rebound.
Unplanned
Last Updated: 12 Aug 2025 09:34 by Martin Ivanov

When using an INotifyCollectionChanged (like ObservableCollection<T>), RadGridView's data engine subscribes to the CollectionChanged event of the bound collection.

It seems that the WPF views are recreated when you connect to a running remote desktop session or switch the user to a session where the corresponding WPF app is already opened. This creates new instances of all controls, but no unload or another disposal event happens. In this case, the logic that subscribes to the CollectionChanged event again is triggered for the new RadGridView, but the old one never detaches from the event. This causes a memory leak.

If you connect to the session multiple times, the CollectionChanged handler will be attached multiple times leading to a memory leak.

To work this around, set the ItemsSource of RadGridView to null in the SystemEvents.SessionChanged static event.

private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
    if (e.Reason == SessionSwitchReason.SessionLock)
    {
        BindingOperations.ClearAllBindings(this.RadGridViewFixed);
    }
}

Completed
Last Updated: 12 Aug 2025 10:30 by ADMIN
Release 2025.3.812 (2025 Q3)
When the ShowToolTipOnTrimmedText property of the columns is set to True, the tooltips of the cells will open even when their text is not trimmed if the UseLayoutRounding property of RadGridView is set to True.
Unplanned
Last Updated: 07 Jul 2025 13:45 by Stenly
Currently, when exporting/copying cells from a column that is bound to a nested property, the base logic of the GridViewDataColumn is that it has a separate logic for this setup. When exporting/copying, the column will try to retrieve the display value rather than the underlying value.
Unplanned
Last Updated: 01 Jul 2025 10:01 by Martin Ivanov

Currently, the delimiter is hardcoded to ",". Add a setting that allows changing this and also synchronizing it with the current culture of the system.

Declined
Last Updated: 16 Jun 2025 11:32 by ADMIN
When an initial filter is set via the ColumnFilterDescriptor property of a column, changing the filter's value via the distinct values in the UI causes the control to not be filtered correctly.
Unplanned
Last Updated: 16 Apr 2025 09:36 by Stenly

In the case where some of the columns are hidden and all of the columns' display indexes are changed, applying grouping could result in some of the cells from the columns that have custom CellTemplate to not receive it.

To work this around, you could manually change the widths of the columns by iterating the Columns collection as shown below:

foreach (var column in this.GridView.Columns)
{
    GridViewLength length = column.Width;

    if (length.IsAbsolute)
    {
        column.Width = new GridViewLength(length.Value + 0.00001);
    }
}

Unplanned
Last Updated: 14 Apr 2025 14:48 by Stenly
When a RadGridView is filtered, grouped, and sorted, some of the rows cannot be selected when the SelectionMode is set to Extended and the SelectionUnit is set to Mixed.
Completed
Last Updated: 21 May 2025 07:52 by ADMIN
Release 2025.2.521 (2025 Q2)
Distinct values are not displayed when setting the FilterMemberPath to the Date property of a DateTime DataTable column when it contains DBNull.Value.

Generally, this is present because while the distinct values are generated, we check for the Date property in each row, however, when it reaches a row that has a DBNull.Value value, an exception is thrown because the Date property cannot be found in null.
Completed
Last Updated: 21 May 2025 07:52 by ADMIN
Release 2025.2.521 (2025 Q2)

NullReferenceException occurs when the the automation peers creation for the rows goes over 10,000 peers (the MaxCachedPeersSize setting of the GridViewDataControlAutomationPeer). The exception occurs only when the 'record' modifier is used in the class definition. For example:

public record class MyClass(int Id)
{
}

The exception stacktrace is:

System.NullReferenceException: 'Object reference not set to an instance of an object.'
peer was null.
Telerik.Windows.Controls.GridView.dll!Telerik.Windows.Automation.Peers.GridViewDataControlAutomationPeer.ClearPeer(Telerik.Windows.Automation.Peers.DataItemAutomationPeer peer)   Telerik.Windows.Controls.GridView.dll!Telerik.Windows.Automation.Peers.GridViewDataControlAutomationPeer.GetOrCreateItemPeer(object item, int index) Line 288 C#  Telerik.Windows.Controls.GridView.dll!Telerik.Windows.Automation.Peers.GridViewRowAutomationPeer.FindDataItemAutomationPeer(System.Collections.Generic.List<System.Windows.Automation.Peers.AutomationPeer> childPeers) Telerik.Windows.Controls.GridView.dll!Telerik.Windows.Automation.Peers.GridViewRowAutomationPeer.GetChildrenCore() 

.

To work this around use the "class" modifier instead of "record". For example, instead of:

public record class MyClass(int Id)
{
}

Use:

public class MyClass
{
    public int Id { get; set; } 
}

 Or alternatively, increase the MaxCachedPeersSize value.

 

Declined
Last Updated: 09 May 2025 07:40 by Jorge

When adding a button cell as below, if the button cell is selected the button doesn't work when tapping it.

<telerik:GridViewDataColumn Header="Config"
                            DataMemberBinding="{Binding .}" IsReadOnly="True">
    <telerik:GridViewDataColumn.CellTemplate>
        <DataTemplate>
            <!-- Adding telerik:TouchManager.TouchMode="None" solves the issue -->
            <telerik:RadButton HorizontalAlignment="Center" Style="{StaticResource MyButtonStyle}"
                               Margin="2" Padding="1" Width="Auto" Height="Auto"
                               Command="{Binding DataContext.ShowExtraConfigurationCommand, RelativeSource={RelativeSource AncestorType=Window}}"
                               CommandParameter="{Binding .}" ToolTip="Config">
                <telerik:RadGlyph Glyph="{StaticResource GlyphGear}"/>
            </telerik:RadButton>
        </DataTemplate>
    </telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>

As stated in the comment, adding the property below to the RadButton solves the issue.

telerik:TouchManager.TouchMode="None"

I have attached a sample project in which the error occurs, simply tap a button, close the MessageBox and tap the same button again. Thank you for your time!

Declined
Last Updated: 14 Apr 2025 12:30 by ADMIN

If a RadDocking has its theme set to Windows 11 via the StyleManager.Theme attached property, placing a RadGridView inside (styled with a different theme, such as Office_Black, Summer, etc.) will cause its cells to look merged after performing an edit operation.

As a workaround, the RowHeight and the FontSize properties of the RadGridView instance can be used to resolve this.

Unplanned
Last Updated: 11 Mar 2025 11:23 by Jonas
Provide a way to change sort comparer when grouping.
Unplanned
Last Updated: 25 Feb 2025 09:05 by Darren
Using a VirtualQueryableCollectionView as an item source will not maintain selection after a sort.
Unplanned
Last Updated: 24 Feb 2025 09:47 by Martin Ivanov
Add a mechanism to change the fill/foreground color of the funnel icon in the column header. The funnel is a FilteringDropDown element and currently the fill of the icon is hardcoded. 

Add an extra property in the FilteringDropDown element to control this color or sync the current setting with the theme palette (e.g. Windows11Palette), so it can be changed using the palette settings.
Completed
Last Updated: 07 Jul 2025 07:29 by ADMIN
Release 2025.2.707

The following exception is raised when adding a ColumnGroupDescriptor to the GroupDescriptors property of a RadGridView. This bug is data specific and I've only been able to duplicate it with a large data set but the issue seems like it could be addressed without the actual data, given that the code causing the issue is apparently passing a pixelWidth < 0.

System.ArgumentOutOfRangeException: 'The parameter value must be greater than zero.
Parameter name: pixelWidth'

  PresentationCore.dll!System.Windows.Media.Imaging.RenderTargetBitmap.RenderTargetBitmap(int pixelWidth, int pixelHeight, double dpiX, double dpiY, System.Windows.Media.PixelFormat pixelFormat) Unknown
  Telerik.Windows.Controls.dll!Telerik.Windows.Controls.FrameworkElementToImageConverter.ToImage(System.Windows.FrameworkElement element) Unknown
  Telerik.Windows.Controls.GridView.dll!Telerik.Windows.Controls.GridView.GridViewGroupPanel.ConvertFrameworkElementToImage(System.Windows.FrameworkElement frameworkElement) Unknown
  Telerik.Windows.Controls.GridView.dll!Telerik.Windows.Controls.GridView.GridViewGroupPanel.GetEffectiveContentForDescriptor(Telerik.Windows.Data.IGroupDescriptor descriptor) Unknown
  Telerik.Windows.Controls.GridView.dll!Telerik.Windows.Controls.GridView.GridViewGroupPanel.PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item) Unknown
  PresentationFramework.dll!System.Windows.Controls.ItemsControl.MS.Internal.Controls.IGeneratorHost.PrepareItemContainer(System.Windows.DependencyObject container, object item) Unknown
  PresentationFramework.dll!System.Windows.Controls.Panel.AddChildren(System.Windows.Controls.Primitives.GeneratorPosition pos, int itemCount) Unknown
  PresentationFramework.dll!System.Windows.Controls.Panel.OnItemsChangedInternal(object sender, System.Windows.Controls.Primitives.ItemsChangedEventArgs args) Unknown
  PresentationFramework.dll!System.Windows.Controls.Panel.OnItemsChanged(object sender, System.Windows.Controls.Primitives.ItemsChangedEventArgs args) Unknown
  PresentationFramework.dll!System.Windows.Controls.ItemContainerGenerator.OnItemAdded(object item, int index, System.Collections.Specialized.NotifyCollectionChangedEventArgs collectionChangedArgs) Unknown
  PresentationFramework.dll!System.Windows.Controls.ItemContainerGenerator.OnCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs args) Unknown
  WindowsBase.dll!System.Windows.WeakEventManager.ListenerList<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.DeliverEvent(object sender, System.EventArgs e, System.Type managerType) Unknown
  WindowsBase.dll!System.Windows.WeakEventManager.DeliverEvent(object sender, System.EventArgs args) Unknown
  PresentationFramework.dll!System.Windows.Data.CollectionView.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs args) Unknown
  WindowsBase.dll!System.Windows.WeakEventManager.ListenerList<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.DeliverEvent(object sender, System.EventArgs e, System.Type managerType) Unknown
  WindowsBase.dll!System.Windows.WeakEventManager.DeliverEvent(object sender, System.EventArgs args) Unknown
  PresentationFramework.dll!System.Windows.Data.CollectionView.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs args) Unknown
  PresentationFramework.dll!System.Windows.Data.ListCollectionView.ProcessCollectionChangedWithAdjustedIndex(System.Collections.Specialized.NotifyCollectionChangedEventArgs args, int adjustedOldIndex, int adjustedNewIndex) Unknown
  System.dll!System.Collections.ObjectModel.ObservableCollection<System.__Canon>.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e) Unknown
  Telerik.Windows.Data.dll!Telerik.Windows.Data.ObservableItemCollection<Telerik.Windows.Data.IGroupDescriptor>.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e) Unknown
  System.dll!System.Collections.ObjectModel.ObservableCollection<System.__Canon>.InsertItem(int index, System.__Canon item) Unknown
> Sage.Platform.Core.Wpf.dll!Sage.EstDataSource.Wpf.RadGridViewSerializer.DeserializeGroupDescriptors(Telerik.Windows.Controls.GridView.GridViewDataControl grid, Sage.Wpf.Utilities.GridViewSerializationInfo serializationInfo) Line 524 C#
  Sage.Platform.Core.Wpf.dll!Sage.EstDataSource.Wpf.RadGridViewSerializer.DeserializeGridInfo(Telerik.Windows.Controls.GridView.GridViewDataControl grid, System.Func<string, bool> isRenamableColumn, System.Xml.XmlReader reader, bool skipDeserializeGroups) Line 235 C#
  Sage.Platform.Core.Wpf.dll!Sage.EstDataSource.Wpf.RadGridViewSerializer.DeserializeGridSettings(Telerik.Windows.Controls.GridView.GridViewDataControl grid, System.Func<string, bool> isRenamableColumn, System.IO.Stream stream, bool skipDeserializeGroups) Line 199 C#
  Sage.Platform.Core.Wpf.dll!Sage.EstDataSource.Wpf.RadGridViewSerializer.DeserializeGridSettings(Telerik.Windows.Controls.GridView.GridViewDataControl grid, System.Func<string, bool> isRenamableColumn, System.IO.Stream stream) Line 168 C#
  Sage.Estimating.DataSource.Wpf.dll!Sage.EstDataSource.Wpf.ViewModel.EstimateDB.EstimateGridViewModel.DeserializeLayoutGridInfo(Telerik.Windows.Controls.RadGridView dataGrid, System.IO.MemoryStream stream) Line 122 C#
  Sage.Estimating.DataSource.Wpf.dll!Sage.EstDataSource.Wpf.ViewModel.EstimateDB.EstimateGridViewModel.DeserializeCurrentLayoutGridInfo(Telerik.Windows.Controls.RadGridView dataGrid, System.IO.MemoryStream defaultLayoutStream) Line 257 C#
  Sage.Estimating.DataSource.Wpf.dll!Sage.EstDataSource.Wpf.View.EstimateDB.EstimateGrid.ApplyCurrentLayoutToGrid() Line 210 C#
  Sage.Estimating.DataSource.Wpf.dll!Sage.EstDataSource.Wpf.View.EstimateDB.EstimateGrid.EstimateInfoGrid_Loaded(object sender, System.Windows.RoutedEventArgs e) Line 167 C#
  PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source, System.Windows.RoutedEventArgs args, bool reRaised) Unknown
  PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender, System.Windows.RoutedEventArgs args) Unknown
  PresentationFramework.dll!System.Windows.BroadcastEventHelper.BroadcastEvent(System.Windows.DependencyObject root, System.Windows.RoutedEvent routedEvent) Unknown
  PresentationFramework.dll!System.Windows.BroadcastEventHelper.BroadcastLoadedEvent(object root) Unknown
  PresentationCore.dll!MS.Internal.LoadedOrUnloadedOperation.DoWork() Unknown
  PresentationCore.dll!System.Windows.Media.MediaContext.FireLoadedPendingCallbacks() Unknown
  PresentationCore.dll!System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks() Unknown
  PresentationCore.dll!System.Windows.Media.MediaContext.RenderMessageHandlerCore(object resizedCompositionTarget) Unknown
  PresentationCore.dll!System.Windows.Media.MediaContext.RenderMessageHandler(object resizedCompositionTarget) Unknown
  WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) Unknown
  WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) Unknown
  WindowsBase.dll!System.Windows.Threading.DispatcherOperation.InvokeImpl() Unknown
  WindowsBase.dll!MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(object obj) Unknown
  mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Unknown
  mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Unknown
  mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) Unknown
  WindowsBase.dll!MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext executionContext, System.Threading.ContextCallback callback, object state) Unknown
  WindowsBase.dll!System.Windows.Threading.DispatcherOperation.Invoke() Unknown
  WindowsBase.dll!System.Windows.Threading.Dispatcher.ProcessQueue() Unknown
  WindowsBase.dll!System.Windows.Threading.Dispatcher.WndProcHook(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled) Unknown
  WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled) Unknown
  WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) Unknown
  WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) Unknown
  WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) Unknown
  WindowsBase.dll!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs) Unknown
  WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam) Unknown
  [Native to Managed Transition]
  [Managed to Native Transition]
  WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame) Unknown
  PresentationFramework.dll!System.Windows.Application.RunDispatcher(object ignore) Unknown
  PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window) Unknown
  Sage.EstManagementConsole.exe!Sage.EstManagementConsole.EstimatingManagementConsoleApp.Main() Unknown

Completed
Last Updated: 07 Jul 2025 07:29 by ADMIN
Release 2025.2.707

The RadGridView control hangs when the frozen columns are enabled and the application is resized. The exact resizing depends on the screen resolution and the exact new size. This was originally recreated on a monitor with 1600x900 resolution 125% DPI and the application was maximized (resized from restored to full screen size). The issue occurs in the Fluent theme. Also, the FluentPalette.Palette.ScrollBarsMode static property should be set to Normal.

To work this around, you can overrider the MeasureOverride method of RadGridView and add the following code:

public class CustomGridView: RadGridView
{
    private static readonly PropertyInfo internalColumnsProp = typeof(GridViewDataControl).GetProperty("InternalColumns", BindingFlags.Instance | BindingFlags.NonPublic);
    private static MethodInfo invalidateColumnsMethod;

    protected override Size MeasureOverride(Size availableSize)
    {
        if (EnableRowVirtualization && !double.IsInfinity(availableSize.Height))
        {
            var internalColumns = internalColumnsProp.GetValue(this);
            if (invalidateColumnsMethod == null)
            {
                invalidateColumnsMethod = internalColumns.GetType().GetMethod("InvalidateColumnWidthsCalculation", BindingFlags.Instance | BindingFlags.NonPublic);                     
            }

            invalidateColumnsMethod.Invoke(internalColumns, null);
        }
        return base.MeasureOverride(availableSize);
    }

 

1 2 3 4 5 6