gpt4 book ai didi

c# - WPF 在 DataTemplate 中将 DataContext 传递给我的 UserControl

转载 作者:太空狗 更新时间:2023-10-30 01:34:35 25 4
gpt4 key购买 nike

我有一个带有两个 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 绑定(bind)正在工作,在我从集合中添加/删除时显示所有选项卡,但如何在我的 UserControls 中获取 DataContext?启动 UserControl 时,DataContext 始终为 null。

最佳答案

模板的绑定(bind)问题是,一旦呈现为单个控件,根据控件将找到其父级的数据上下文,不是从可视化树而是从其逻辑树。

所以最好的办法是通过 RelativeSource 直接绑定(bind)绑定(bind)到视觉父级的数据上下文,例如:

{Binding TabName, 
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type TabControl }}}

或更有可能:

   {Binding DataContext.TabName, 
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type TabControl }}}

关于c# - WPF 在 DataTemplate 中将 DataContext 传递给我的 UserControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com