@@ -195,6 +195,17 @@ public partial class MultiSelect<TValue>
195195 [ NotNull ]
196196 private IStringLocalizer < MultiSelect < TValue > > ? Localizer { get ; set ; }
197197
198+ private List < SelectedItem > ? _itemsCache ;
199+
200+ private List < SelectedItem > Rows
201+ {
202+ get
203+ {
204+ _itemsCache ??= string . IsNullOrEmpty ( SearchText ) ? GetRowsByItems ( ) : GetRowsBySearch ( ) ;
205+ return _itemsCache ;
206+ }
207+ }
208+
198209 private string ? PreviousValue { get ; set ; }
199210
200211 private string ? PlaceholderString => SelectedItems . Count == 0 ? PlaceHolder : null ;
@@ -220,7 +231,6 @@ protected override void OnParametersSet()
220231 ClearIcon ??= IconTheme . GetIconByKey ( ComponentIcons . MultiSelectClearIcon ) ;
221232
222233 ResetItems ( ) ;
223- OnSearchTextChanged ??= text => Items . Where ( i => i . Text . Contains ( text , StringComparison . OrdinalIgnoreCase ) ) ;
224234 ResetRules ( ) ;
225235
226236 // 通过 Value 对集合进行赋值
@@ -250,6 +260,26 @@ protected override void OnAfterRender(bool firstRender)
250260 /// <returns></returns>
251261 protected override Task InvokeInitAsync ( ) => InvokeVoidAsync ( "init" , Id , Interop , new { ConfirmMethodCallback = nameof ( ConfirmSelectedItem ) , SearchMethodCallback = nameof ( TriggerOnSearch ) , TriggerEditTag = nameof ( TriggerEditTag ) , ToggleRow = nameof ( ToggleRow ) } ) ;
252262
263+ private List < SelectedItem > GetRowsByItems ( )
264+ {
265+ var items = new List < SelectedItem > ( ) ;
266+ if ( Items != null )
267+ {
268+ items . AddRange ( Items ) ;
269+ }
270+ return items ;
271+ }
272+
273+ private List < SelectedItem > GetRowsBySearch ( )
274+ {
275+ var items = OnSearchTextChanged ? . Invoke ( SearchText ) ?? FilterBySearchText ( GetRowsByItems ( ) ) ;
276+ return items . ToList ( ) ;
277+ }
278+
279+ private IEnumerable < SelectedItem > FilterBySearchText ( IEnumerable < SelectedItem > source ) => string . IsNullOrEmpty ( SearchText )
280+ ? source
281+ : source . Where ( i => i . Text . Contains ( SearchText , StringComparison ) ) ;
282+
253283 /// <summary>
254284 /// FormatValueAsString 方法
255285 /// </summary>
@@ -540,6 +570,7 @@ private void ResetItems()
540570 [ JSInvokable ]
541571 public Task TriggerOnSearch ( string searchText )
542572 {
573+ _itemsCache = null ;
543574 SearchText = searchText ;
544575 StateHasChanged ( ) ;
545576 return Task . CompletedTask ;
0 commit comments