如何根据类型指定内容模板
How to specifiy content template based on type
我有一个带有单个特定选项卡的 TabControl,它包含一个用户控件 (ui:GeneralControl
),以及一个绑定到 VM 集合的集合,使用另一个用户控件 (ui:ModelControl
)。为此,我使用了 CompositeCollection 和 DataTemplates。
我已经使用目标类型在控件的资源中定义了 DataTemplates,但是它没有像 ContentTemplate 那样正确地被选择。
这段代码有什么问题?
<TabControl>
<TabControl.Resources>
<CollectionViewSource x:Key="modelsCollection" Source="{Binding OpenedModels}" />
<DataTemplate DataType="{x:Type main:ProjectViewModel}">
<ui:GeneralControl />
</DataTemplate>
<DataTemplate DataType="{x:Type models:ModelViewModel}">
<ui:ModelControl />
</DataTemplate>
</TabControl.Resources>
<TabControl.ItemsSource>
<CompositeCollection>
<TabItem Header="General" />
<!--Collection of model tabs -->
<CollectionContainer Collection="{Binding Source={StaticResource modelsCollection}}"/>
</CompositeCollection>
</TabControl.ItemsSource>
<TabControl.ItemTemplate>
<DataTemplate DataType="models:ModelViewModel">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
感谢 Clemens,我发现我的方法是正确的,我只是缺少一个选项卡上的绑定:
我有一个数据错误,但它在
<TabControl>
<TabControl.Resources>
<CollectionViewSource x:Key="modelsCollection" Source="{Binding OpenedModels}" />
<DataTemplate DataType="{x:Type main:ProjectViewModel}">
<ui:GeneralControl />
</DataTemplate>
<DataTemplate DataType="{x:Type models:ModelViewModel}">
<ui:ModelControl />
</DataTemplate>
</TabControl.Resources>
<TabControl.ItemsSource>
<CompositeCollection>
<TabItem Header="General" Content="{Binding ProjectViewModel}"/>
<!--Collection of model tabs -->
<CollectionContainer Collection="{Binding Source={StaticResource modelsCollection}}"/>
</CompositeCollection>
</TabControl.ItemsSource>
<TabControl.ItemTemplate>
<DataTemplate DataType="models:ModelViewModel">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
我有一个带有单个特定选项卡的 TabControl,它包含一个用户控件 (ui:GeneralControl
),以及一个绑定到 VM 集合的集合,使用另一个用户控件 (ui:ModelControl
)。为此,我使用了 CompositeCollection 和 DataTemplates。
我已经使用目标类型在控件的资源中定义了 DataTemplates,但是它没有像 ContentTemplate 那样正确地被选择。
这段代码有什么问题?
<TabControl>
<TabControl.Resources>
<CollectionViewSource x:Key="modelsCollection" Source="{Binding OpenedModels}" />
<DataTemplate DataType="{x:Type main:ProjectViewModel}">
<ui:GeneralControl />
</DataTemplate>
<DataTemplate DataType="{x:Type models:ModelViewModel}">
<ui:ModelControl />
</DataTemplate>
</TabControl.Resources>
<TabControl.ItemsSource>
<CompositeCollection>
<TabItem Header="General" />
<!--Collection of model tabs -->
<CollectionContainer Collection="{Binding Source={StaticResource modelsCollection}}"/>
</CompositeCollection>
</TabControl.ItemsSource>
<TabControl.ItemTemplate>
<DataTemplate DataType="models:ModelViewModel">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
感谢 Clemens,我发现我的方法是正确的,我只是缺少一个选项卡上的绑定:
我有一个数据错误,但它在
<TabControl>
<TabControl.Resources>
<CollectionViewSource x:Key="modelsCollection" Source="{Binding OpenedModels}" />
<DataTemplate DataType="{x:Type main:ProjectViewModel}">
<ui:GeneralControl />
</DataTemplate>
<DataTemplate DataType="{x:Type models:ModelViewModel}">
<ui:ModelControl />
</DataTemplate>
</TabControl.Resources>
<TabControl.ItemsSource>
<CompositeCollection>
<TabItem Header="General" Content="{Binding ProjectViewModel}"/>
<!--Collection of model tabs -->
<CollectionContainer Collection="{Binding Source={StaticResource modelsCollection}}"/>
</CompositeCollection>
</TabControl.ItemsSource>
<TabControl.ItemTemplate>
<DataTemplate DataType="models:ModelViewModel">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>