@@ -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