Recently, I had to implement infinite scrolling / lazy loading on my PCL ListView. I will leave out most of the code, but the most important part was:
ViewModel
var countries = // get countries
foreach (var country in countries)
{
// Countries is an ObservableCollection<Country>
Countries.Add(country);
}
This seemed to work fine on Android, but on iOS, I kept getting out of range exceptions especially when I scrolled the list fast. The fix for me was to run this code in the main UI thread.
// wrap the code with this
Device.BeginInvokeOnMainThread(async () => {});
My question now is should all view model service calls that update or set an observable collection be always executed in the UI thread?
I have several commands that set Countries
. They seem to work fine without the UI thread block. I only had issues with adding items as indicated above.
Should ObservableCollection always be set and updated in the UI thread?