Quick answer: Unity UI Toolkit ListView showing wrong data per row after scroll? Item recycling reuses elements but doesn't reset bindings - re-bind in bindItem.

Inventory list of 1000 items. Scroll fast; rows show data from rows that already scrolled past.

Implement bindItem fully

list.bindItem = (el, i) => {{
  el.Q<Label>().text = items[i].Name;
}};

bindItem runs per-row on recycle. Reset every visual element you care about.

Or use makeItem for fresh

Disable recycling for short lists; create per row. Slower; simpler.

Verify with scrolling

Scroll to bottom of large list. Visible items should match the underlying data; mismatch = bindItem incomplete.

“ListView reuses visual elements. Reuse without reset = stale visuals.”

Test ListView with long lists during dev. Short-list tests miss recycling bugs.

Related reading