2017-05-12 2 views
-1

Einig Pseudo-Code als Beispiel zu dienen:Wie kann ich an den DataContext der View und nicht an den innersten DataContext binden?

<UserControl> 
    <UserControl.DataContext> 
     <vm:MyViewModel /> 
    </UserControl.DataContext> 

    <Grid> 
     <StackPanel DataContext="{Binding SomeOtherContext}"> 
      <TextBlock Text="{Binding MyString}" /> 
      <Grid DataContext="THE FIRST CONTEXT"> 
       <TextBlock Text="{Binding PropertyFromFirstContext}" /> 
      </Grid> 
     </StackPanel> 
    </Grid> 
</UserControl> 

Also, was ich suche ist die Bindungssyntax erforderlich anstelle von „dem ersten Kontext“, um die innerste TextBlock Bindung ziehen ihr Eigentum zu machen von der äußersten DataContext, und nicht die eine auf der Zwischen StackPanel gesetzt.

Ich habe Beispiele wie this one gefunden, die einen Weg vorschlagen, es in der TextBlock Bindung zu tun, aber wenn ich eine Masse von Kontrollen dort hatte, ist das eine Menge extra Codierung. Ich würde lieber eine neue DataContext in diesem bestimmten Bereich festlegen, so dass die innere Bindesyntax sauberer zu lesen ist.

+0

downvote, nicht wahr? Weil...? – DonBoitnott

Antwort

3

Versuchen Sie Folgendes:

<UserControl x:Name="Parent"> 
    <UserControl.DataContext> 
     <vm:MyViewModel /> 
    </UserControl.DataContext> 

    <Grid> 
     <StackPanel DataContext="{Binding SomeOtherContext}"> 
      <TextBlock Text="{Binding MyString}" /> 
      <Grid DataContext="{Binding DataContext, ElementName=Parent}"> 
       <TextBlock Text="{Binding PropertyFromFirstContext}" /> 
      </Grid> 
     </StackPanel> 
    </Grid> 
</UserControl> 
+0

Leider hat das nicht funktioniert. – DonBoitnott

+0

Ist SomeOtherContext eine Eigenschaft von MyViewModel? – Yevgeniy

+0

Ja, ist es. Es ist eigentlich eine Instanz eines Datenmodells. – DonBoitnott

Verwandte Themen