概要
protected override bool DoesItemMatchSearch ( TreeViewItem treeViewItem, string search ) { // ... }
TreeView の DoesItemMatchSearch をオーバーライドして検索処理を実装した際に、
MultiColumnHeader の sortedColumnIndex が無視されてしまう現象に遭遇した
TreeView のソースコードを見てみたら
rows.Sort((x, y) => EditorUtility.NaturalCompare(x.displayName, y.displayName));
TreeView で検索された時は MultiColumnHeader の sortedColumnIndex を無視して
TreeViewItem の displayName で勝手に並べ替えを行う実装になっていた
internal sealed class MyTreeViewItem : TreeViewItem { private readonly MultiColumnHeader m_header; public override string displayName { get { var sortedColumnIndex = m_header.sortedColumnIndex; // ... } }
TreeViewItem を継承したクラスで displayName をオーバーライドして
MultiColumnHeader の sortedColumnIndex に応じて
displayName で返す文字列を変えるようにしたら
TreeView で検索した時に要素の表示順が変わらないようになった
ただし、この方法だと昇順降順には対応していない