From 34a6a8a2d0c169bc4cf2004baf987e99f27a3606 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 31 Jan 2025 14:14:37 +0800 Subject: [PATCH] feat(CheckboxListGeneric): add ItemTemplate parameter (#5255) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: bump version 9.3.1-beta05 * feat: 增加 ItemTemplate 支持 * test: 增加单元测试 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- .../Checkbox/CheckboxListGeneric.razor | 3 ++- .../Checkbox/CheckboxListGeneric.razor.cs | 10 +++++++++ .../Components/CheckboxListGenericTest.cs | 21 +++++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 57cfec7cb5f..9936f1cc002 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 9.3.1-beta04 + 9.3.1-beta05 diff --git a/src/BootstrapBlazor/Components/Checkbox/CheckboxListGeneric.razor b/src/BootstrapBlazor/Components/Checkbox/CheckboxListGeneric.razor index 24ef73c5e39..109d4f79c46 100644 --- a/src/BootstrapBlazor/Components/Checkbox/CheckboxListGeneric.razor +++ b/src/BootstrapBlazor/Components/Checkbox/CheckboxListGeneric.razor @@ -29,7 +29,8 @@ else + Value="@item.Active" OnStateChanged="@((_, v) => OnStateChanged(item, v))" + ChildContent="GetChildContent(item)"> } diff --git a/src/BootstrapBlazor/Components/Checkbox/CheckboxListGeneric.razor.cs b/src/BootstrapBlazor/Components/Checkbox/CheckboxListGeneric.razor.cs index 8c642b0a834..e340b428279 100644 --- a/src/BootstrapBlazor/Components/Checkbox/CheckboxListGeneric.razor.cs +++ b/src/BootstrapBlazor/Components/Checkbox/CheckboxListGeneric.razor.cs @@ -110,6 +110,12 @@ public partial class CheckboxListGeneric : IModelEqualityComparer? OnMaxSelectedCountExceed { get; set; } + /// + /// 获得/设置 项模板 + /// + [Parameter] + public RenderFragment>? ItemTemplate { get; set; } + /// /// 获得 当前选项是否被禁用 /// @@ -216,6 +222,10 @@ private async Task OnStateChanged(SelectedItem item, bool v) /// private Task OnClick(SelectedItem item) => OnStateChanged(item, !item.Active); + private RenderFragment? GetChildContent(SelectedItem item) => ItemTemplate == null + ? null + : ItemTemplate(item); + /// /// /// diff --git a/test/UnitTest/Components/CheckboxListGenericTest.cs b/test/UnitTest/Components/CheckboxListGenericTest.cs index d6080b0a61e..1b4e854ca3d 100644 --- a/test/UnitTest/Components/CheckboxListGenericTest.cs +++ b/test/UnitTest/Components/CheckboxListGenericTest.cs @@ -252,6 +252,27 @@ await cut.InvokeAsync(async () => Assert.False(max); } + [Fact] + public void ItemTemplate_Ok() + { + var items = new List>() + { + new(new Foo() { Id = 1, Name = "Test1" }, "Test 1"), + new(new Foo() { Id = 2, Name = "Test2" }, "Test 2"), + new(new Foo() { Id = 3, Name = "Test3" }, "Test 3") + }; + var cut = Context.RenderComponent>(pb => + { + pb.Add(a => a.Items, items); + pb.Add(a => a.ItemTemplate, foo => builder => + { + builder.AddContent(0, foo.Text); + }); + }); + var labels = cut.FindAll(".checkbox-item .form-check-label"); + Assert.Equal(3, labels.Count); + } + private class Dummy { [Required]