通常,对于要在ItemsControl
. 这些视图模型中的每一个都将使用DataTemplate
定义其外观的 a 来显示,例如:
- “视图”选项卡将具有类型的视图模型
ViewData
- 添加和编辑选项卡将具有类型的视图模型
ItemData
您将为您的每个视图模型或数据类型创建数据模板TabControl
。
<TabControl Name="TabControl" ItemsSource="{Binding MyItems}">
<TabControl.Resources>
<DataTemplate DataType="{x:Type local:ViewData}">
<!--...your "View" tab controls.-->
</DataTemplate>
<DataTemplate DataType="{x:Type local:ItemData}">
<!--...your "Add" and "Edit" tab controls.-->
</DataTemplate>
</TabControl.Resources>
</TabControl>
通过仅指定 aDataType
模板将自动应用于ItemsSource
. 如果您TabItems
手动添加并将数据项设置为内容,这也有效,例如:
<TabItem Name ="View" Header="View">
<MyTreeFolder:ViewData/>
</TabItem>
作为隐式数据模板的替代方案,您可以创建自定义DataTemplateSelector
和覆盖SelectTemplate
。这样,您不仅可以根据数据类型选择数据模板,还可以根据需要选择各个属性、字段、方法或属性。
public class TabControlDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item == null || !(container is FrameworkElement frameworkElement))
return null;
if (item is ViewData)
return (DataTemplate)frameworkElement.FindResource("ViewDataTemplate");
if (item is ItemData)
return (DataTemplate)frameworkElement.FindResource("ItemDataTemplate");
return null;
}
}
在 XAML 中,您将使用键创建数据模板并添加数据模板选择器。
<TabControl Name="TabControl">
<TabControl.Resources>
<DataTemplate x:Key="ViewDataTemplate" DataType="{x:Type local:ViewData}">
<!--...your "View" tab controls.-->
</DataTemplate>
<DataTemplate x:Key="ItemDataTemplate" DataType="{x:Type local:ItemData}">
<!--...your "Add" and "Edit" tab controls.-->
</DataTemplate>
</TabControl.Resources>
<TabControl.ContentTemplateSelector>
<local:TabControlDataTemplateSelector/>
</TabControl.ContentTemplateSelector>
</TabControl>
这同样适用于 aItemsSource
和手动添加的数据项TabItem
。