So, I am in love with .NET's property grid, and the type converters I can build to make the property grid edit pretty much just like I want it to. But I am getting into a situation where in a typical use case, there is a collection of items (a dozen or two) of a certain type (a custom object I've created called a Layer). I need now to make a general overview of this list in a table/spreadsheet style format. Of course, my first thought is to use ListView in Details mode, and simply populate it with a loop like so

Dim LayerName as String = "example"
Dim lvi As New ListViewItem(LayerName)
and so on and so forth.

With a PropertyGrid, you could set, for example, .SelectedObject = Layers(LayerName) and it'd dynamically list and allow you to update the properties, only needing a .Refresh() if a property of the object was updated elsewhere.

Using a loop like the one above, I'd have to perform that all over again every time any property is updated. Seems a bit inefficient. The design also becomes tedious very quickly. If I add or remove a property, change a property type, or want the columns listed in a different order, I have to go change the columns in the ListView designer, and then change everywhere in the code where it gets populated because of the way the subitems get added in numerical order.

My question is: Is there a way to have a ListViewItem, or ideally, the whole ListView itself, populated by an object or collection in the same manner as a PropertyGrid?

My only other thought is to work up some code in the Layer TypeConverter's ConvertTo function to handle converting to a ListViewItem, or in the Layers collection's TypeConverter to convert to ListViewItemsCollection. And then of course, initiate all the conversions and item populating. Would this be the ideal way to do it, or is there some easier way?