将数据绑定类别作为带有嵌套复选框的选项卡项的模板
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>
我想创建一个 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>