2010-11-21 6 views
1

En général, DataContext dans UserControls est-il défini? Si je fais quelque chose comme ci-dessous dans mon UserControl,DataContext dans UserControls

DataContext = this 

Dans ma fenêtre ou d'autres contrôles quand je veux utiliser le contrôle avec un liant, je vais avoir un RelativeSource pour pointer vers la fenêtre/UserControl

<local:UserControl1 TextContent="{Binding Text1, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" /> 

est le moyen de lier des contrôles au sein UserControls: utilisation définies RelativeSource dans UserControls au lieu de DataContext?

<UserControl x:Class="SetCurrentValueTest.UserControl1" ...> 
    <TextBox Text="{Binding Path=TextContent, RelativeSource={RelativeSource AncestorType={x:Type local:UserControl1}}}" /> 
</UserControl> 

Répondre

1

Je ne sais pas si c'est ce que vous recherchez, mais si vous voulez lier à la dépendance-Properties UserControls, utilisez ceci:

<UserControl x:Class="SetCurrentValueTest.UserControl1" ...> 
    <TextBox Text="{Binding Path=TextContent, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> 
</UserControl> 

Et si vous voulez lier aux années UserControl DataContext, utilisez cette liaison:

<UserControl x:Class="SetCurrentValueTest.UserControl1" ...> 
    <TextBox Text="{Binding Path=DataContext.TextContent, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> 
</UserControl> 

non pas que je spécifie UserControl comme Ancêtre-type et non votre type de béton (UserControl1).

+0

Le second exemple ne fera rien d'autre que {Binding TextContent} sauf si vous avez défini le DataContext à quelque chose d'autre entre le UserControl et le TextBox; sinon le TextBlock hérite du DataContext. Et spécifier UserControl ou UserControl1 en tant que AncestorType fera seulement une différence s'il existe un autre UserControl d'un type différent contenu dans le UserControl1 et contenant le TextBox. –