将数据绑定类别作为带有嵌套复选框的选项卡项的模板

Template with data binding categories as tab items with nested check boxes

我想创建一个 WPF 表单,它在 TabControl 内有一个 TabItem,对于 Checklist 内的每个 Category。 每个 TabItem 内部是一个 CheckBox 列表,其中每个 ChecklistItem.

都有名称

这是实际的数据结构:

public class Checklist
{
    public int ChecklistId { get; set; }
    public IEnumerable<Category> Categories { get; set; }
}

public class Category
{
    public string CategoryName { get; set; }
    public IEnumerable<ChecklistItem> ChecklistItems { get; set; }
}

public class ChecklistItem
{
    public int ItemId { get; set; }
    public string ItemName { get; set; }
    public bool ItemChecked { get; set; }
}

如何为此创建 XAML?

您可以使用 ItemContainerStyle 将选项卡 header 设置为 CategoryName 并将数据模板设置为 ContentTemplate 用于选项卡内容。内容模板使用 ItemsControl 显示 ChecklistItem 的列表,使用另一个包含绑定属性的 CheckBox 的数据模板。

<TabControl ItemsSource="{Binding Checklist.Categories}">
   <TabControl.ItemContainerStyle>
      <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
         <Setter Property="Header" Value="{Binding CategoryName}"/>
      </Style>
   </TabControl.ItemContainerStyle>
   <TabControl.ContentTemplate>
      <DataTemplate DataType="{x:Type local:Category}">
         <ItemsControl ItemsSource="{Binding ChecklistItems}">
            <ItemsControl.ItemTemplate>
               <DataTemplate DataType="{x:Type local:ChecklistItem}">
                  <CheckBox Content="{Binding ItemName}" IsChecked="{Binding ItemChecked}"/>
               </DataTemplate>
            </ItemsControl.ItemTemplate>
         </ItemsControl>
      </DataTemplate>
   </TabControl.ContentTemplate>
</TabControl>