DEV Community

Jon Stødle
Jon Stødle

Posted on • Originally published at blog.jonstodle.com on

3 2

TrackballLabelTemplate in Syncfusion chart only works with a list

After spending too many hours trying to figure this one out, I have to write it down to help any unfortunate soul that should come across this undocumented behavior. (Notice how I put all the important keywords in the title?)

While it's most often recommended to supply an IList<T> when setting the ItemsSource of a collection view in Xamarin.Forms or other XAML platforms, it's not required. You can just as well supply an or IEnumerable<T> and things will work fine.

The benefit if passing a list is that the system can do random access of items. In other words, it can use the mylist[42] syntax. This is a lot more efficient than trying to access a random item in an IEnumerable<T>.

You might think "but there's ElementAt() on IEnumerable<T>". Yes, but that's basically just skipping n - 1 items before accessing the desired item. myEnumerable.ElementAt(42) is basically this: myEnumerable.Skip(42 - 1).First().

In the Xamarin.Forms documentation it actually explictly tells you to provide a list if you can, for performance reasons.

Back to SfChart by Syncfusion:

Apparently there's a limitation in SfChart when it comes to IEnumerable<T> as the ItemsSource: If you specify a custom TrackballLabelTemplate for your chart, it will be ignored if you don't use an IList<T>.

This had me stuck for quite a while.

I usually provide a list when binding to ItemsSource, but in this instance I was using Where() in the view code-behind to filter out some unwanted items. Since Where() returns an IEnumerable<T> things didn't work. Putting a ToList() after the Where() clause fixed it all.

This wasted more hours than I want to admit to figure out...

If you stumble upon this post via Google; you're welcome :)

Happy coding!

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay