2010-11-21 5 views
1

Wie werden DataContext in UserControls normalerweise gesetzt? Wenn ich so etwas wie die unten in meinem Usercontrol tun,DataContext in UserControls

DataContext = this 

In meinem Fenster oder andere Steuerelemente, wenn ich die Kontrolle mit einer Bindung verwendet werden soll, werde ich eine RelativeSource haben müssen, um das Fenster/Usercontrol

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

Ist die Art und Weise Kontrollen innerhalb Usercontrols zu binden: set Verwendung RelativeSource in Benutzersteuerelementen statt DataContext?

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

Antwort

1

ich weiß nicht, ob es das, was Sie suchen, aber wenn Sie auf die Benutzersteuerelemente Dependency-Eigenschaften binden möchten, verwenden Sie diese:

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

Und wenn Sie auf die Usercontrol binden möchten Datacontext, benutzen Sie diese Bindung:

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

nicht, dass ich als Usercontrol Vorfahr-Typ und nicht die Betontyp (UserControl1) am angeben.

+0

Das zweite Beispiel macht nichts anderes als {Binding TextContent}, außer Sie haben den DataContext auf etwas anderes zwischen dem UserControl und dem TextBox festgelegt; Andernfalls erbt der TextBlock den DataContext. Und das Angeben von UserControl oder UserControl1 als AncestorType wird nur einen Unterschied machen, wenn ein anderes UserControl eines anderen Typs in dem UserControl1 enthalten ist und das TextBox enthält. –