[英]WPF pass a DataContext to my UserControl inside a DataTemplate
我有一個包含兩個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。
模板的綁定問題是,一旦呈現為單獨控件,將根據控件查找其父級的數據上下文,而不是來自可視樹,而是來自其邏輯樹。
因此,最好的辦法是通過RelativeSource
直接綁定綁定到可視父級的datacontext,例如:
{Binding TabName,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type TabControl }}}
或更有可能:
{Binding DataContext.TabName,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type TabControl }}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.