@@ -11,9 +11,7 @@ namespace BootstrapBlazor.Components;
1111/// <summary>
1212/// Tree 组件
1313/// </summary>
14- #if NET6_0_OR_GREATER
1514[ CascadingTypeParameter ( nameof ( TItem ) ) ]
16- #endif
1715public partial class TreeView < TItem > : IModelEqualityComparer < TItem >
1816{
1917 /// <summary>
@@ -58,7 +56,7 @@ public partial class TreeView<TItem> : IModelEqualityComparer<TItem>
5856 . Build ( ) ;
5957
6058 private string ? GetContentClassString ( TreeViewItem < TItem > item ) => CssBuilder . Default ( "tree-content" )
61- . AddClass ( "active" , ActiveItem == item )
59+ . AddClass ( "active" , _activeItem == item )
6260 . Build ( ) ;
6361
6462 private string ? GetNodeClassString ( TreeViewItem < TItem > item ) => CssBuilder . Default ( "tree-node" )
@@ -74,7 +72,7 @@ public partial class TreeView<TItem> : IModelEqualityComparer<TItem>
7472 /// <summary>
7573 /// 获得/设置 选中节点 默认 null
7674 /// </summary>
77- private TreeViewItem < TItem > ? ActiveItem { get ; set ; }
75+ private TreeViewItem < TItem > ? _activeItem ;
7876
7977 /// <summary>
8078 /// 获得/设置 是否禁用整个组件 默认 false
@@ -168,11 +166,11 @@ public partial class TreeView<TItem> : IModelEqualityComparer<TItem>
168166 [ NotNull ]
169167 public List < TreeViewItem < TItem > > ? Items { get ; set ; }
170168
171- /// <summary>
172- /// 获得/设置 扁平化数据集合注意 <see cref="TreeViewItem{TItem}.Parent"/> 参数一定要赋值,不然无法呈现层次结构
173- /// </summary>
174- [ Parameter ]
175- public List < TreeViewItem < TItem > > ? FlatItems { get ; set ; }
169+ ///// <summary>
170+ ///// 获得/设置 扁平化数据集合注意 <see cref="TreeViewItem{TItem}.Parent"/> 参数一定要赋值,不然无法呈现层次结构
171+ ///// </summary>
172+ // [Parameter]
173+ // public List<TreeViewItem<TItem>>? FlatItems { get; set; }
176174
177175 /// <summary>
178176 /// 获得/设置 是否显示 CheckBox 默认 false 不显示
@@ -347,6 +345,11 @@ protected override void OnParametersSet()
347345 SearchIcon ??= IconTheme . GetIconByKey ( ComponentIcons . TreeViewSearchIcon ) ;
348346 ClearSearchIcon ??= IconTheme . GetIconByKey ( ComponentIcons . TreeViewResetSearchIcon ) ;
349347 LoadingIcon ??= IconTheme . GetIconByKey ( ComponentIcons . TreeViewLoadingIcon ) ;
348+
349+ if ( IsReset )
350+ {
351+ _rows = null ;
352+ }
350353 }
351354
352355 /// <summary>
@@ -355,8 +358,12 @@ protected override void OnParametersSet()
355358 /// <returns></returns>
356359 protected override async Task OnParametersSetAsync ( )
357360 {
358- _rows = null ;
359- Items ??= [ ] ;
361+ if ( Items == null )
362+ {
363+ // 未提供数据显示 loading
364+ return ;
365+ }
366+
360367 if ( Items . Count > 0 )
361368 {
362369 await CheckExpand ( Items ) ;
@@ -369,16 +376,16 @@ protected override async Task OnParametersSetAsync()
369376 }
370377
371378 // 从数据源中恢复当前 active 节点
372- if ( ActiveItem != null )
379+ if ( _activeItem != null )
373380 {
374- ActiveItem = TreeNodeStateCache . Find ( Items , ActiveItem . Value , out _ ) ;
381+ _activeItem = TreeNodeStateCache . Find ( Items , _activeItem . Value , out _ ) ;
375382 }
376383
377384 if ( _init == false )
378385 {
379386 // 设置 ActiveItem 默认值
380- ActiveItem ??= Items . FirstOrDefaultActiveItem ( ) ;
381- ActiveItem ? . SetParentExpand < TreeViewItem < TItem > , TItem > ( true ) ;
387+ _activeItem ??= Items . FirstOrDefaultActiveItem ( ) ;
388+ _activeItem ? . SetParentExpand < TreeViewItem < TItem > , TItem > ( true ) ;
382389 _init = true ;
383390 }
384391 }
@@ -417,16 +424,16 @@ public async ValueTask TriggerKeyDown(string key)
417424 {
418425 // 通过 ActiveItem 找到兄弟节点
419426 // 如果兄弟节点没有时,找到父亲节点
420- if ( ActiveItem != null )
427+ if ( _activeItem != null )
421428 {
422429 if ( key == "ArrowUp" || key == "ArrowDown" )
423430 {
424431 _keyboardArrowUpDownTrigger = true ;
425- await ActiveTreeViewItem ( key , ActiveItem ) ;
432+ await ActiveTreeViewItem ( key , _activeItem ) ;
426433 }
427434 else if ( key == "ArrowLeft" || key == "ArrowRight" )
428435 {
429- await OnToggleNodeAsync ( ActiveItem , true ) ;
436+ await OnToggleNodeAsync ( _activeItem , true ) ;
430437 }
431438 }
432439 }
@@ -574,7 +581,7 @@ private async Task<IEnumerable<IExpandableNode<TItem>>> GetChildrenRowAsync(Tree
574581 /// <returns></returns>
575582 private async Task OnClick ( TreeViewItem < TItem > item )
576583 {
577- ActiveItem = item ;
584+ _activeItem = item ;
578585 if ( ClickToggleNode && CanTriggerClickNode ( item ) )
579586 {
580587 await OnToggleNodeAsync ( item ) ;
@@ -622,21 +629,43 @@ private async Task OnClickResetSearch()
622629 /// <summary>
623630 /// 设置选中节点
624631 /// </summary>
625- public void SetActiveItem ( TreeViewItem < TItem > item )
632+ public void SetActiveItem ( TreeViewItem < TItem > ? item )
633+ {
634+ _activeItem = item ;
635+ _activeItem ? . SetParentExpand < TreeViewItem < TItem > , TItem > ( true ) ;
636+ StateHasChanged ( ) ;
637+ }
638+
639+ /// <summary>
640+ /// 重新设置 <see cref="Items"/> 数据源方法
641+ /// </summary>
642+ public void SetItems ( List < TreeViewItem < TItem > > items )
626643 {
627- ActiveItem = item ;
628- ActiveItem . SetParentExpand < TreeViewItem < TItem > , TItem > ( true ) ;
644+ //FlatItems = null;
645+ Items = items ;
646+ _rows = null ;
629647 StateHasChanged ( ) ;
630648 }
631649
650+ ///// <summary>
651+ ///// 重新设置 <see cref="FlatItems"/> 数据源方法
652+ ///// </summary>
653+ ///// <param name="flatItems"></param>
654+ //public void SetFlatItems(List<TreeViewItem<TItem>> flatItems)
655+ //{
656+ // Items = null;
657+ // FlatItems = flatItems;
658+ // _rows = null;
659+ // StateHasChanged();
660+ //}
661+
632662 /// <summary>
633663 /// 设置选中节点
634664 /// </summary>
635665 public void SetActiveItem ( TItem item )
636666 {
637- ActiveItem = Items . GetAllItems ( ) . FirstOrDefault ( i => Equals ( i . Value , item ) ) ;
638- ActiveItem ? . SetParentExpand < TreeViewItem < TItem > , TItem > ( true ) ;
639- StateHasChanged ( ) ;
667+ var val = Items . GetAllItems ( ) . FirstOrDefault ( i => Equals ( i . Value , item ) ) ;
668+ SetActiveItem ( val ) ;
640669 }
641670
642671 private static CheckboxState ToggleCheckState ( CheckboxState state ) => state switch
@@ -832,7 +861,8 @@ private List<TreeViewItem<TItem>> Rows
832861 {
833862 get
834863 {
835- _rows ??= FlatItems ?? Items . ToFlat < TItem > ( ) . ToList ( ) ;
864+ // 扁平化数据集合
865+ _rows ??= Items . ToFlat < TItem > ( ) . ToList ( ) ;
836866 return _rows ;
837867 }
838868 }
0 commit comments