Tuesday, May 16, 2017

Xamarin Forms: GridView Control

So I was busy with my nightly dev sessions, building the next big startup product [read side-project], when I ran into what I thought was a fairly simple requirement:

I wanted to show a list of stuff in a template of an item that was in a ListView.


Turns out hosting a ListView inside a ListView doesn’t work out so well. Besides it being a rocket ship when I only needed a small car, it just doesn’t work. You see, the ListView has some sizing issues that doesn’t make it a great candidate for said scenario.
Now unless I’m missing something here (which is quite likely), I couldn’t really find any Xamarin Forms control that hosted a simple list of items, without needing properties like grouping, selecteditem etc.

After some searching on the interwebs, I came across this really simple example of what I needed from Chase Florell. (I’ve since happened upon this contribution by Daniel Luberda, which also looks pretty decent). It met my very basic requirement of a simple list of stuff, minus some handy bindings, so I set out to edit the code.

You can see the results (source code and sample project) here

Basically, you can create a tile-like layout with N many columns. The content of the “tiile” can be any template you like.

Sample Xaml:


The control also supports ItemTappedCommand, which will call a delegate and pass the selected data item as a parameter.

The default for MaxColumns is 1 – which will give you a simple list as illustrated at the top of the post. More columns will give you something like:


I wouldn’t use this implementation for more than about 20 or so data items, as there is no cell recycling as you would get in a ListView, but for very basic scnenarios, I’ve found this simple implementation good enough.

As a side note, I’ve also moved the previously mentioned Bindable IsVisible ToolbarItem control to the linked repo, in addition to a few other very basic controls like an Editor that expands as you type, a ListView with ItemClickCommand and default RecycleElement mode, a floating label pattern Entry (pending), and a simple WrapLayout (which I’ve used in combination with an AddStringEntry to create a Tag List)  - which I’ll cover in subsequent posts as I find the time.

Xamarin FTW Smile

No comments: