簡體   English   中英

WPF將DataContext傳遞給DataTemplate中的UserControl

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM