我有一个包含两个ContentTemplates的TabControl:
<TabControl ItemsSource="{Binding Tabs}" ContentTemplateSelector="{StaticResource TabSelector}">
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding TabName}" HorizontalAlignment="Center" />
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
我的两个模板是两个用户控件:
<UserControl.Resources>
<ResourceDictionary>
<DataTemplate x:Key="UserListTemplate">
<uc:UserList />
</DataTemplate>
<DataTemplate x:Key="UserContentTemplate">
<uc:User />
</DataTemplate>
<uc:TabSelector x:Key="TabSelector" UserListTemplate="{StaticResource UserListTemplate}" UserContentTemplate="{StaticResource UserContentTemplate}" />
</ResourceDictionary>
</UserControl.Resources>
我在XAML中设置DataContext:
<UserControl.DataContext>
<local:ViewUsers />
</UserControl.DataContext>
TabControl绑定正在运行,当我从集合中添加/删除时显示所有选项卡,但是如何在我的UserControls中获取DataContext?启动UserControl时,DataContext始终为null。
答案 0 :(得分:3)
模板的绑定问题是,一旦呈现为单独控件,取决于控件找到其父数据上下文,而不是来自可视树而是来自其逻辑树。
所以最好的办法是通过RelativeSource
直接绑定绑定到可视父亲的datacontext,例如:
{Binding TabName,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type TabControl }}}
或更有可能:
{Binding DataContext.TabName,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type TabControl }}}