protected override void SelectionChanged(IList <int> selectedIds) { if (selectedIds.Count > 0) { FrameItem(selectedIds[0]); var render = AssetTreeManager.mIns.GetGuiRender(EditorContexts.mIns.Mode); if (render != null) { List <TreeViewItem> itemList = ListPool <TreeViewItem> .Get(); var rows = GetRows(); for (int i = 0; i < rows.Count; i++) { var rowdata = rows[i] as AssetTreeItem <T>; if (rowdata != null && selectedIds.Contains(rowdata.id)) { itemList.Add(rowdata); } } foreach (var subrender in render) { if (subrender.TypeMode == _viewMode) { IGuiTree treeRender = subrender as IGuiTree; if (treeRender != null) { treeRender.SelectionChanged(itemList); } } } //is searching if (!string.IsNullOrEmpty(searchString)) { IList <int> expandlist = GetExpanded(); if (expandlist != null) { List <int> list = new List <int>(); list.AddRange(expandlist); Stack <int> stack = StackPool <int> .Get(); foreach (var item in itemList) { stack.Push(item.id); } while (stack.Count > 0) { var itemid = stack.Pop(); if (!list.Contains(itemid)) { list.Add(itemid); if (_model.HasParent(itemid)) { var parents = _model.GetParent(itemid); foreach (var parent in parents) { if (!list.Contains(parent.Id) && parent.Id != _model.Root.Id) { stack.Push(parent.Id); } } ListPool <T> .Release(parents); } } } StackPool <int> .Release(stack); SetExpanded(list); } } ListPool <TreeViewItem> .Release(itemList); } else { base.SelectionChanged(selectedIds); } } }