Il DataBinding in Windows Presentation Foundation da molte possibilità che un tempo richiedevano la realizzazione di controlli appositamente ideati. Ad esempio volendo posizionare degli elementi creati a partire da una collection che ne contenga le coordinate, ci può venire in aiuto il controllo che fa da base alla normale ListBox. Mi riferisco a ItemsControl, che può essere personalizzato facilmente a questo scopo. Ecco un esempio di codice XAML:
<Window x:Class="WindowsApplication1.Window3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:domain="clr-namespace:WindowsApplication1"
Title="WindowsApplication1" Height="300" Width="300">
<Window.Resources>
<DataTemplate x:Key="template">
<Ellipse Width="20" Height="20" Fill="Blue" />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<domain:Class1 />
</Window.DataContext>
<ItemsControl ItemTemplate="{StaticResource template}" ItemsSource="{Binding Path=Items}">
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
<Setter Property="Canvas.Left" Value="{Binding Path=X}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="Red" IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Window>
Il controllo è stato configurato per fare in modo che il suo Panel principale sia creato di tipo Canvas cioè il controllo di Layout che in WPF consente il posizionamento assoluto dei suoi controlli figlio. Inoltre ad ogni elemento creato, in accordo con quanto descritto dal DataTemplate viene impostato uno style che posiziona l'elemento alle giuste coordinate. Eseguendo il codice si otterranno dei pallini posizionati in accordo con le coordinate espresse dalla fonte dati.