Binding WPF Canvas Children to an ObservableCollection
I think you can do this with ItemsControl + ItemsPanelTemplate. Like this:
<ItemsControl ItemsSource="{Binding YourCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
To read more about this approach refer to Dr.WPF: ItemsControl: A to Z (P is for Panel)
The solution Anvaka suggested is great, but as John Bowen pointed out you need to know a bit more, if you would like to actually bind your items to the Canvas attached properties.
Here's an example on how to bind to Canvas.Left and Canvas.Top:
<ItemsControl ItemsSource="{Binding YourCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding YourModelLeft}" />
<Setter Property="Canvas.Top" Value="{Binding YourModelTop}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
Btw, I found the solution on this question, after I tried Anvaka's suggestion, where the binding didn't work.
Hopefully this helps others, looking for the same answer.