Example:
<PageTitle>Home</PageTitle>
<div>
<TelerikTextBox Width="20rem" Placeholder="Pallet" DebounceDelay="1000" @bind-Value="@_textInput" OnChange="@(async (input) => await OnInputChanged(input))" />
</div>
<p>@_textInput</p>
@code {
private string? _textInput;
private async Task OnInputChanged(object input)
{
Console.WriteLine($"Immediate: function parameter: {input}, bound variable: {_textInput}");
await Task.Delay(1000);
Console.WriteLine($"Delayed: function parameter: {input}, bound variable: {_textInput}");
//Make the OnChange event receive the immediate value when the DebounceDelay is set
}
}The DebounceDelay is set to 1 second to highlight the behavior, although we have observed it with delays less than 100 milliseconds when the input is from a barcode scanner and the Enter is part of the scan. Start the sample, type "123" in the input, and hit enter within 1 second.
The output in the console is:
Immediate: function parameter: , bound variable:
Delayed: function parameter: , bound variable: 123
I have a cascading DropDownList scenario with virtual scrolling. When the first DropDownList changes value, the second one should reset its scrollbar to the top, because it now contains new data. This doesn't happen.
Here is a REPL test page.
===
ADMIN EDIT
===
As a workaround for the time being, you may track when the value is changed in the parent DropDownList to dispose and re-initialize the child DropDownList.
Here is an example: https://blazorrepl.telerik.com/mdafHabk585ZtzyV54.
The Gantt Timeline header no longer scrolls horizontally together with the content below it.
The issue occurs in version 15.0.0.
A possible workaround is to enable scroll syncing with JavaScript:
https://blazorrepl.telerik.com/GqYiHFvd10Uo0MgN20
@implements IAsyncDisposable
@inject IJSRuntime JS
<TelerikGantt Data="@GanttData"
@bind-View="@CurrentView"
Class="scrollable-gantt-1"
IdField="@nameof(FlatModel.Id)"
ParentIdField="@nameof(FlatModel.ParentId)"
Width="700px"
Height="500px">
<GanttViews>
<GanttDayView></GanttDayView>
<GanttWeekView></GanttWeekView>
<GanttMonthView></GanttMonthView>
<GanttYearView></GanttYearView>
</GanttViews>
<GanttColumns>
<GanttColumn Field="@nameof(FlatModel.Id)"
Visible="false">
</GanttColumn>
<GanttColumn Field="@nameof(FlatModel.Title)"
Expandable="true"
Width="160px"
Title="Task Title">
</GanttColumn>
<GanttColumn Field="@nameof(FlatModel.PercentComplete)"
Title="Completed"
Width="60px">
</GanttColumn>
<GanttColumn Field="@nameof(FlatModel.Start)"
Width="100px"
TextAlign="@ColumnTextAlign.Right">
</GanttColumn>
<GanttColumn Field="@nameof(FlatModel.End)"
DisplayFormat="End: {0:d}"
Width="100px">
</GanttColumn>
</GanttColumns>
</TelerikGantt>
<script suppress-error="BL9992">
function initGanttScrollSync(ganttSelector) {
const ganttTimelineContent = document.querySelector(ganttSelector + " .k-gantt-timeline .k-grid-content");
if (ganttTimelineContent) {
ganttTimelineContent.addEventListener("scroll", onGanttTimelineScroll);
}
}
function disposeGanttScrollSync(ganttSelector) {
const ganttTimelineContent = document.querySelector(ganttSelector + " .k-gantt-timeline .k-grid-content");
if (ganttTimelineContent) {
ganttTimelineContent.removeEventListener("scroll", onGanttTimelineScroll);
}
}
function onGanttTimelineScroll(e) {
const ganttTimelineHeader = e.target.closest(".k-gantt-timeline").querySelector(".k-grid-header-wrap");
if (ganttTimelineHeader) {
ganttTimelineHeader.scrollLeft = e.target.scrollLeft;
}
}
</script>
@code {
private List<FlatModel> GanttData { get; set; } = new List<FlatModel>();
private List<FlatModel> Data { get; set; } = new List<FlatModel>();
private GanttView CurrentView { get; set; } = GanttView.Week;
private int LastId { get; set; } = 1;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JS.InvokeVoidAsync("initGanttScrollSync", ".scrollable-gantt-1");
}
await base.OnAfterRenderAsync(firstRender);
}
public async ValueTask DisposeAsync()
{
await JS.InvokeVoidAsync("disposeGanttScrollSync", ".scrollable-gantt-1");
}
protected override void OnInitialized()
{
GanttData = new List<FlatModel>();
var random = new Random();
for (int i = 1; i <= 3; i++)
{
var newItem = new FlatModel()
{
Id = LastId,
Title = $"Employee {i}",
Start = new DateTime(2020, 12, 10 + i),
End = new DateTime(2020, 12, 11 + i),
PercentComplete = Math.Round(random.NextDouble(), 2),
HasChildren = true
};
GanttData.Add(newItem);
var parentId = LastId;
LastId++;
for (int j = 1; j <= 2; j++)
{
GanttData.Add(new FlatModel()
{
Id = LastId,
ParentId = parentId,
Title = $"Employee {i} : {j}",
Start = new DateTime(2020, 12, 20 + j),
End = new DateTime(2020, 12, 21 + i + j),
PercentComplete = Math.Round(random.NextDouble(), 2)
});
LastId++;
}
}
base.OnInitialized();
}
public class FlatModel
{
public int Id { get; set; }
public int? ParentId { get; set; }
public string Title { get; set; } = string.Empty;
public double PercentComplete { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public bool HasChildren { get; set; }
}
}
Connections to contextapi.telerik.com fail when the client computer is behind a proxy. The observed error is:
Using ContextApi URL: https://contextapi.telerik.com:443When double-clicking a task in the Gantt Timeline, the popup edit form may not appear. Instead, the vertical blue band for task dragging may show.
The problem is more likely to occur when using a touchpad.
===
ADMIN EDIT
===
For the time being, a possible option is to use the DropDownList component that exposes such events. Customize it so it can look and behave similarly to the DropDownButton.
Example implementation: https://blazorrepl.telerik.com/mekbkTPE21kwyMBU05.
@page "/test-timepicker-listview"
<h3>TimePicker in ListView Test</h3>
<TelerikListView Data="@TestItems" Width="100%">
<HeaderTemplate>
<div style="padding: 10px; background-color: #f0f0f0; font-weight: bold;">
Time Entry Items
</div>
</HeaderTemplate>
<Template>
<div style="padding: 15px; border-bottom: 1px solid #ddd;">
<div style="margin-bottom: 10px;">
<strong>Item:</strong> @context.Name
</div>
<div style="display: flex; align-items: center; gap: 10px;">
<label>Start Time:</label>
<TelerikTimePicker @bind-Value="@context.StartTime" Format="hh:mm tt" Width="150px"
AdaptiveMode="AdaptiveMode.Auto" />
</div>
<div style="display: flex; align-items: center; gap: 10px; margin-top: 10px;">
<label>End Time:</label>
<TelerikTimePicker @bind-Value="@context.EndTime" Format="hh:mm tt" Width="150px"
AdaptiveMode="AdaptiveMode.Auto" />
</div>
</div>
</Template>
</TelerikListView>
@code {
private List<TimeEntryItem> TestItems { get; set; } = new();
protected override void OnInitialized()
{
// Initialize with some test data
TestItems = new List<TimeEntryItem>
{
new TimeEntryItem { Id = 1, Name = "Morning Shift", StartTime = new DateTime(2025, 11, 18, 8, 0, 0), EndTime = new
DateTime(2025, 11, 18, 12, 0, 0) },
};
}
public class TimeEntryItem
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}
}Appointment editing does not work on Chrome for mobile (Android).
Run the following demo in the Chrome for mobile browser, on a mobile device with Android : https://demos.telerik.com/blazor-ui/scheduler/appointment-editing
The popup editor does not show up.
The popup editor shows up.
Chrome
No response
The documented lazy loading scenario is not compatible with Telerik UI for Blazor 15.0.0, because of the new ITelerikIconService. Unlike the ITelerikStringLocalizer, there is no alternative way to register this icon service outside Program.cs.
(bug report only)
The DropDownList (and other dropdown components - ComboBox, MultiColumnComboBox, etc.) render a redundant attribute in their popup ul element: aria-live="polite". Listboxes that use aria-activedescendant for tracking should not also announce via a live region — this creates duplicate/conflicting announcements by screen readers.
(optional)
The popup’s ul element renders aria-live=”polite”.
Either render aria-live=”off” (e.g., Kendo Angular DropDownList), or don’t render the aria-live attribute at all.
When using multi-series Chart I know that it is possible to click on legends and hide/show the entire serie. The answer here works for that:
https://feedback.telerik.com/blazor/1442813-show-hide-series-on-legend-click
But how do I achieve the same in a Pie/Donut chart where I only want to hide categories?
In this case I would like to have the exact same behavior where the legend becomes dimmed...
I have been having issues adding the month view to a Telerik Blazor scheduler component, when there is grouping. It gives a null reference error any time I try to switch to the month view. I also tried it using the available demo for grouping in Telerik REPL, the only difference I found between my code and the demo was that I had used the ItemsPerSlot parameter. I added this to the demo, and was able to reproduce the error I was seeing, and I have attached the console output from the REPL demo. I believe there is either a bug with the ItemsPerSlot being used in conjunction with grouping on a scheduler component, or some instruction missing from how to set it up properly to prevent this null reference issue.
Changed code:
<SchedulerMonthView ItemsPerSlot="5"></SchedulerMonthView>
Demo used:
Blazor Scheduler (Event Calendar) Demos - Grouping | Telerik UI for Blazor