我有一个带有单个特定选项卡的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>
答案 0 :(得分:2)
感谢Clemens我发现我的方法正确,我只是在一个标签上缺少绑定:
我有数据错误,但它位于another question :)
<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>