Skip to content

Commit 9062da8

Browse files
T1246T1246
authored andcommitted
对Select组件进行修改,设置IsClearable后,如果绑定类型可以为空,清除后清楚所有选中项而不是第一项
1 parent 2cf8af4 commit 9062da8

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

src/BootstrapBlazor/Components/Select/Select.razor.cs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,12 +294,15 @@ private SelectedItem? SelectedRow
294294

295295
private SelectedItem? GetSelectedRow()
296296
{
297+
298+
var canBeNull = ValueCanBeNull();
297299
var item = GetItemWithEnumValue()
298300
?? Rows.Find(i => i.Value == CurrentValueAsString)
299301
?? Rows.Find(i => i.Active)
300-
?? Rows.FirstOrDefault(i => !i.IsDisabled)
302+
?? Rows.FirstOrDefault(i => !i.IsDisabled&&!canBeNull)
301303
?? GetVirtualizeItem(CurrentValueAsString);
302-
304+
305+
303306
if (item != null)
304307
{
305308
if (_init && DisableItemChangedWhenFirstRender)
@@ -576,7 +579,26 @@ private async Task OnClearValue()
576579
{
577580
await OnClearAsync();
578581
}
582+
583+
if (ValueCanBeNull())
584+
{
585+
586+
if (SelectedItem != null) SelectedItem.Active = false;
587+
SelectedItem = null;
579588

589+
// 触发 StateHasChanged
590+
_lastSelectedValueString = string.Empty;
591+
CurrentValueAsString = _lastSelectedValueString;
592+
this.Value = default;
593+
if (this.ValueChanged.HasDelegate)
594+
await this.ValueChanged.InvokeAsync(default);
595+
// 触发 SelectedItemChanged 事件--由于设置成了null
596+
//if (OnSelectedItemChanged != null)
597+
//{
598+
// await OnSelectedItemChanged(SelectedItem);
599+
//}
600+
return;
601+
}
580602
SelectedItem? item;
581603
if (OnQueryAsync != null)
582604
{
@@ -592,7 +614,11 @@ private async Task OnClearValue()
592614
await SelectedItemChanged(item);
593615
}
594616
}
595-
617+
private bool ValueCanBeNull()
618+
{
619+
var tType = typeof(TValue);
620+
return !tType.IsValueType || Nullable.GetUnderlyingType(tType) != null;
621+
}
596622
private string? ReadonlyString => IsEditable ? null : "readonly";
597623

598624
private async Task OnChange(ChangeEventArgs args)

0 commit comments

Comments
 (0)