ModList
を使っていたら、配列/リストの順々に要素を追加したのに、
(ある一定の数以上の要素があると[要検証])順番をめちゃくちゃにする現象が発生した。
現象が発生したコード
だいたいこんな感じのコード
_uiList.Clear();
for (var i = 0; i < 18; i++)
{
_items[i] = new UIListItem(i);
}
_uiList.AddRange(_items);
Recalculate();
最終的になんかいろいろ試したりしたものの
_uiList.Clear();
for (var i = 0; i < 18; i++)
{
_items[i] = new UIListItem(i);
_uiList.Add(_items[i]);
}
Recalculate();
結果は変わらなかった。(めちゃくちゃにされた)
原因
Terraria(tML)のコードを見たら分かった。
UIList
は自動的に並び替えを行うようになっていた。
※ ちなみにRecalculate();
があろうとなかろうと実行された
解決策
こちらも、Terraria(tML)のコードを見たら分かった。
UIList
には、リストの並び替えのアルゴリズムを上書きできるようなメンバuiList.ManualSortMethod
(※メソッドではない)があった。
Action<List<UIElement>>
型。
並び替えをしてほしくなかったので
uiList.ManualSortMethod = (_ => { });
と書けばOK。
ちなみにこれを書いた場所はOnInitialize()