I’m using the UMG Viewmodel plugin to bind a list of items from a ViewModel to a ListView Widget. The ListView uses an Entry ViewModel for each item, and then Entry Widget has bindings to that for setting the visual content. I’ve been running into the issue that when a new Entry is added, there’s a one-frame delay before the item updates its visuals to match its ViewModel bindings. It’s most apparent at lower frame rates.
From the attached sample:
Frame X
[Image Removed]
Frame X+1
[Image Removed]
I dug around the codebase and it looks like the bindings are applied at the end of the frame via the FTSTicker::GetCoreTicker callback, when UListViewBase::HandleAnnounceGeneratedEntries is run. I’m guessing this runs after the Widget has been queued up for rendering, so if the render thread makes it to screen first it will show the not yet up to date Widget.
As a workaround I’m setting the ListView Entry Visibility to Hidden by default, and then once the bindings kick in it sets to to Visible. But this is tedious to do for every ListView in our UI that we’re using ViewModel bindings for. Is there a better way to do this - or am I going about this the wrong way?
Thanks!