Skip to content

Commit 6fbacbc

Browse files
authored
fix(MultiSelectGeneric): update value when bind-Value changed (#6505)
* feat: 增加 IModelEqualityComparer 接口 * chore: bump version 9.8.3-beta01
1 parent a36dd13 commit 6fbacbc

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/BootstrapBlazor/BootstrapBlazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>9.8.2</Version>
4+
<Version>9.8.3-beta01</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/SelectGeneric/MultiSelectGeneric.razor.cs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace BootstrapBlazor.Components;
1212
/// MultiSelectGeneric component
1313
/// </summary>
1414
[ExcludeFromCodeCoverage]
15-
public partial class MultiSelectGeneric<TValue>
15+
public partial class MultiSelectGeneric<TValue> : IModelEqualityComparer<TValue>
1616
{
1717
private List<SelectedItem<TValue>> SelectedItems { get; } = [];
1818

@@ -189,12 +189,30 @@ public partial class MultiSelectGeneric<TValue>
189189
[Parameter]
190190
public RenderFragment<SelectedItem<TValue>>? ItemTemplate { get; set; }
191191

192+
/// <summary>
193+
/// 获得/设置 比较数据是否相同回调方法 默认为 null
194+
/// <para>提供此回调方法时忽略 <see cref="CustomKeyAttribute"/> 属性</para>
195+
/// </summary>
196+
[Parameter]
197+
public Func<TValue, TValue, bool>? ValueEqualityComparer { get; set; }
198+
199+
Func<TValue, TValue, bool>? IModelEqualityComparer<TValue>.ModelEqualityComparer
200+
{
201+
get => ValueEqualityComparer;
202+
set => ValueEqualityComparer = value;
203+
}
204+
205+
/// <summary>
206+
/// 获得/设置 数据主键标识标签 默认为 <see cref="KeyAttribute"/>用于判断数据主键标签,如果模型未设置主键时可使用 <see cref="ValueEqualityComparer"/> 参数自定义判断数据模型支持联合主键
207+
/// </summary>
208+
[Parameter]
209+
[NotNull]
210+
public Type? CustomKeyAttribute { get; set; } = typeof(KeyAttribute);
211+
192212
[Inject]
193213
[NotNull]
194214
private IStringLocalizer<MultiSelect<TValue>>? Localizer { get; set; }
195215

196-
private string? PlaceholderString => SelectedItems.Count == 0 ? PlaceHolder : null;
197-
198216
private string? ScrollIntoViewBehaviorString => ScrollIntoViewBehavior == ScrollIntoViewBehavior.Smooth
199217
? null
200218
: ScrollIntoViewBehavior.ToDescriptionString();
@@ -535,4 +553,12 @@ private void ResetSelectedItems()
535553
}
536554
}
537555
}
556+
557+
/// <summary>
558+
/// <inheritdoc/>
559+
/// </summary>
560+
/// <param name="x"></param>
561+
/// <param name="y"></param>
562+
/// <returns></returns>
563+
public bool Equals(TValue? x, TValue? y) => this.Equals<TValue>(x, y);
538564
}

0 commit comments

Comments
 (0)