@@ -150,6 +150,10 @@ public partial class SelectTree<TValue> : IModelEqualityComparer<TValue>
150150 [ NotNull ]
151151 private IStringLocalizer < SelectTree < TValue > > ? Localizer { get ; set ; }
152152
153+ [ Inject ]
154+ [ NotNull ]
155+ private IIconTheme ? IconTheme { get ; set ; }
156+
153157 /// <summary>
154158 /// 获得 input 组件 Id 方法
155159 /// </summary>
@@ -161,19 +165,9 @@ public partial class SelectTree<TValue> : IModelEqualityComparer<TValue>
161165 /// </summary>
162166 private string ? InputId => $ "{ Id } _input";
163167
164- /// <summary>
165- /// 获得/设置 上次选项
166- /// </summary>
167- private TreeViewItem < TValue > ? SelectedItem { get ; set ; }
168-
169- private List < TreeViewItem < TValue > > ? ItemCache { get ; set ; }
170-
171- [ NotNull ]
172- private List < TreeViewItem < TValue > > ? ExpandedItemsCache { get ; set ; }
173-
174- [ Inject ]
175- [ NotNull ]
176- private IIconTheme ? IconTheme { get ; set ; }
168+ private TreeViewItem < TValue > ? _selectedItem ;
169+ private List < TreeViewItem < TValue > > ? _itemCache ;
170+ private List < TreeViewItem < TValue > > ? _expandedItemsCache ;
177171
178172 private string ? SelectTreeCustomClassString => CssBuilder . Default ( CustomClassString )
179173 . AddClass ( "select-tree" , IsPopover )
@@ -190,19 +184,6 @@ protected override void OnInitialized()
190184 AddRequiredValidator ( ) ;
191185 }
192186
193- /// <summary>
194- /// <inheritdoc/>
195- /// </summary>
196- protected override async Task OnInitializedAsync ( )
197- {
198- await base . OnInitializedAsync ( ) ;
199-
200- if ( Value != null )
201- {
202- await TriggerItemChanged ( s => Equals ( s . Value , Value ) ) ;
203- }
204- }
205-
206187 /// <summary>
207188 /// <inheritdoc/>
208189 /// </summary>
@@ -263,18 +244,22 @@ private async Task TriggerItemChanged(Func<TreeViewItem<TValue>, bool> predicate
263244 if ( currentItem != null )
264245 {
265246 currentItem . IsActive = true ;
266- await ItemChanged ( currentItem ) ;
247+
248+ if ( _selectedItem == null || ! Equals ( _selectedItem . Value , Value ) )
249+ {
250+ await ItemChanged ( currentItem ) ;
251+ }
267252 }
268253 }
269254
270255 private List < TreeViewItem < TValue > > GetExpandedItems ( )
271256 {
272- if ( ItemCache != Items )
257+ if ( _itemCache != Items )
273258 {
274- ItemCache = Items ;
275- ExpandedItemsCache = TreeViewExtensions . GetAllItems ( ItemCache ) . ToList ( ) ;
259+ _itemCache = Items ;
260+ _expandedItemsCache = [ .. TreeViewExtensions . GetAllItems ( _itemCache ) ] ;
276261 }
277- return ExpandedItemsCache ;
262+ return _expandedItemsCache ! ;
278263 }
279264
280265 /// <summary>
@@ -295,7 +280,7 @@ private async Task OnItemClick(TreeViewItem<TValue> item)
295280 /// <returns></returns>
296281 private async Task ItemChanged ( TreeViewItem < TValue > item )
297282 {
298- SelectedItem = item ;
283+ _selectedItem = item ;
299284 CurrentValue = item . Value ;
300285
301286 // 触发 SelectedItemChanged 事件
0 commit comments