您可能需要一个 ItemsControl。这允许您使用指定的 DataTemplate 呈现一系列项目。您可以在 ItemsControl 内联执行此操作:
<ItemsControl ItemsSource="{Binding MyCollectionOfItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
或从资源中显式引用数据模板......更像是:
<!-- In some parent resource section -->
<DataTemplate x:Key="MyDataTemplateName">
<CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
</DataTemplate>
<!-- ... -->
<ItemsControl ItemsSource="{Binding MyCollectionOfItems}" ItemTemplate="{StaticResource MyDataTemplateName}">
</ItemsControl>
或者,您可以定义一个 DataTemplate 来定义绑定类的外观。(请注意,如果您的 Linq-to-SQL 投影到匿名类型,这不是一个选项)类似:
<!-- In some parent resource section -->
<DataTemplate DataType="{x:Type MyBoundClass}">
<CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
</DataTemplate>
<!-- ... -->
<ItemsControl ItemsSource="{Binding MyCollectionOfItems}">
</ItemsControl>
然后,WPF 将查找与集合中每个项目的 DataType 匹配的 DataTemplate。请注意,这对于绑定需要不同表示的异构集合非常有帮助。
您可以绑定 Stackpanel 的 DataContext,但没有关于为每个数据元素重复模板的内在逻辑。它只是为子控件和包含的{Binding ...}
语句提供上下文。所有处理重复数据的控件都来自 ItemsControl,并通过 ItemsSource 属性获取数据。