Vous voulez probablement un ItemsControl. Cela vous permet de présenter une série d'éléments en utilisant un DataTemplate spécifié. Vous pouvez le faire en ligne du ItemsControl:
<ItemsControl ItemsSource="{Binding MyCollectionOfItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
ou faire référence au modèle de données explicitement à partir d'une ressource ... quelque chose comme:
<!-- In some parent resource section -->
<DataTemplate x:Key="MyDataTemplateName">
<CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
</DataTemplate>
<!-- ... -->
<ItemsControl ItemsSource="{Binding MyCollectionOfItems}" ItemTemplate="{StaticResource MyDataTemplateName}">
</ItemsControl>
Ou vous pouvez définir un DataTemplate qui définit le look et ressentez pour votre classe liée. (Notez que si votre LINQ to SQL est un type pénétrant dans Anonymous, ce n'est pas une option) Quelque chose comme:
<!-- In some parent resource section -->
<DataTemplate DataType="{x:Type MyBoundClass}">
<CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
</DataTemplate>
<!-- ... -->
<ItemsControl ItemsSource="{Binding MyCollectionOfItems}">
</ItemsControl>
WPF cherchera alors un DataTemplate qui correspond au type de données de chacun des éléments dans votre collection. Notez que cela peut être TRÈS utile pour lier des collections hétérogènes nécessitant différentes présentations.
Vous pouvez lier le DataContext du Stackpanel, mais il n'y a pas de logique inhérente à la répétition d'un modèle pour chaque élément de données. Il fournit simplement un contexte pour les contrôles enfants et contient des instructions {Binding ...}
. Tous les contrôles qui gèrent les données répétées descendent d'ItemsControl et emmènent leurs données via la propriété ItemsSource.
+1 Bon, réponse complète. –