In the end, I concluded there was no easy out, so I created a subclass of Grid tailored to be placed inside an ItemsControl's ItemsPanel (With IsItemsHost = "True"), and which would dynamically modify the ColumnDefinitions/RowDefinitions by using GetItemsOwner and GetItemsSource to get the weights of each collection item and setting the width/height of the definitions to that weight with GridUnitType_Star.