Я до сих пор не уверен, чего именно вы хотите достичь, но я все равно пойду, и, возможно, мы сможем найти решение оттуда.
Судя по вашему XAML, у вас есть несколько пользовательских элементов управления. Вы упомянули, что верхний уровень основан на Grid. Является ли Grid элементом управления или элементом ItemPanelTemplate для ItemsControl?
У меня возникает ощущение, что вы хотите, чтобы данные связывали содержимое вашей viewmodel, и для этого вам нужно основывать свои собственные элементы управления на ItemsControl. Поправь меня, если я ошибаюсь.
Примерно так (как уже упоминалось, это предполагает MyCustomGrid в качестве ItemsControl:
<UserControl Name="MyCustomGrid">
<ItemsControl ItemsSource="{Binding Path=MyStackPanelsCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type MyCustomGrid:MyCustomStackPanel}">
<Setter Property="Grid.Row" Value="{Binding Path=GridRow}" />
<Setter Property="Grid.Column" Value="{Binding Path=GridColumn}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type MyCustomGrid:MyCustomStackPanelViewModel}">
<ContentPresenter Content="{Binding Path=MySerializedObjectTurnedInToControl}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</UserControl>
Если это не так, поскольку вы привязываете свою CustomStackPanel и т. Д. Непосредственно к одному именованному свойству в вашей модели представления, это может выглядеть примерно так:
<MyCustomGrid:CustomGrid DataContext="{Binding Path=ViewModel}">
<MyCustomGrid:CustomStackPanel DataContext="{Binding Path=MyFirstStackPanelViewModel}">
...
Извините, если я все еще неправильно понял, я вполне мог упустить что-то очевидное.