GKit.UI.RadzenExt
1.0.0
dotnet add package GKit.UI.RadzenExt --version 1.0.0
NuGet\Install-Package GKit.UI.RadzenExt -Version 1.0.0
<PackageReference Include="GKit.UI.RadzenExt" Version="1.0.0" />
<PackageVersion Include="GKit.UI.RadzenExt" Version="1.0.0" />
<PackageReference Include="GKit.UI.RadzenExt" />
paket add GKit.UI.RadzenExt --version 1.0.0
#r "nuget: GKit.UI.RadzenExt, 1.0.0"
#:package GKit.UI.RadzenExt@1.0.0
#addin nuget:?package=GKit.UI.RadzenExt&version=1.0.0
#tool nuget:?package=GKit.UI.RadzenExt&version=1.0.0
GKit.UI.RadzenExt
Radzen adapter for the GKit UI components — the sibling of GKit.UI.MudBlazorExt over the same
GKit.UI.Data engine.
An application picks one adapter. Component names, type parameters and parameter names match
the MudBlazor adapter, so moving a page between them is a package swap, an @using change, and a
rewrite of the column markup and form bodies. Everything below that line — validators, dialog
subclasses, query factories, row-control descriptors, export, CRUD semantics — is unchanged.
Setup
builder.Services.AddRadzenComponents(); // Radzen's own setup
builder.Services.AddGKitBlazorServices(); // GKit.BlazorExt
builder.Services.AddGKitRadzenUi(); // this package (calls AddGKitUiCore internally)
builder.Services.AddGKitUiLocalization(); // optional, for Italian
// Validators must be resolvable as IValidator<T> for the EditContext bridge:
builder.Services.AddGKitValidator<Widget, WidgetValidator>();
@* MainLayout.razor *@
<RadzenComponents />
@* _Imports.razor *@
@using Radzen
@using Radzen.Blazor
@using GKit.BlazorExt
@using GKit.UI
@using GKit.UI.Data
@using GKit.UI.RadzenExt
Radzen icons are Material Symbols ligatures, so the font must be linked in App.razor:
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" rel="stylesheet" />
Components
Same set and same names as the MudBlazor adapter: ManagedGrid<T>, EntityGrid<T, TDialog>,
EditEntityDialog<T, TForm, TValidator>, EntityAutocomplete<T>,
EntityItemAutocomplete<T, TItem>, ManagedAutocomplete<T>,
ManagedItemAutocomplete<T, TItem>, DataAutocomplete<T>, ManagedText, TimeRangePicker.
Differences from the MudBlazor adapter
These are the places where the two genuinely diverge, rather than merely rendering differently.
| Concern | MudBlazor | Radzen |
|---|---|---|
| Validation | MudForm per-field hook |
EditContext + GKitFluentValidator<T> |
| Validator registration | injected by concrete type | also needs IValidator<T> — use AddGKitValidator |
| Field identity for validation | For="@(() => Model.X)" |
Name="X" |
| Dialog closing | cascaded dialog instance | DialogService.Close — hence IUiDialogHost in DI |
| Dismissal | explicit cancelled flag | null result |
| Column resize | ColumnResizeMode enum |
AllowColumnResize bool |
| Row click | OnRowClick with event args |
OnRowClick with the item |
| Selection | HashSet<T> SelectedItems |
IList<T> SelectedItems |
| Its own strings | needs MudBlazor.Translations |
built in (de, es, fr, it, ja) |
Filtering is not identical
Both adapters carry their own library's filter application across as a delegate, so each behaves
exactly as that library intends — but they do not agree with each other. Radzen defaults to
case-insensitive comparison via FilterCaseSensitivity.Default; MudBlazor defers to the database
collation. The same typed text can match different rows. GridFilterOperator is the intersection
of the two operator sets; Radzen's Custom, In and NotIn map to Unknown in the neutral
projection, which affects inspection only, never the query.
String property paths
Radzen columns take a string path (Property="Category.Name") and its sorter cannot evaluate
method calls. A MudBlazor column written as Property="x => x.MainSite()!.Address" needs either
SortProperty/FilterProperty overrides or a mapped shadow property when ported.
Writing portable pages
Data loading should be written against the neutral model, which compiles unchanged under either adapter:
private async Task<GridPage<Widget>> LoadAsync(GridQuery<Widget> state, CancellationToken token)
{
await using var ctx = await Factory.CreateDbContextAsync(token);
var query = state.ApplyFilters(ctx.Set<Widget>());
var total = await query.CountAsync(token);
return new GridPage<Widget>
{
TotalItems = total,
Items = await state.ApplySorts(query).Skip(state.StartIndex).Take(state.Count).ToListAsync(token)
};
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- GKit.BlazorExt (>= 1.0.0)
- GKit.UI.Abstractions (>= 1.0.0)
- GKit.UI.Data (>= 1.0.0)
- Microsoft.AspNetCore.Components.Web (>= 10.0.12)
- Microsoft.EntityFrameworkCore (>= 10.0.12)
- Radzen.Blazor (>= 11.4.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 46 | 9/23/2026 |