2009-01-12 2 views
3

Je souhaite que la liaison soit liée à une valeur accessible uniquement avec XPath à partir de la propriété d'un élément.Liaison WPF à la valeur accessible par XPath d'une propriété d'élément

L'élément est un ComboBox rempli à partir de XML et sa propriété est SelectedItem. SelectedItem pointe vers un élément XML, et j'aimerais le lier à la valeur d'un élément enfant, qui peut être atteinte avec un XPath.

Le XAML ressemble à ceci, jusqu'à présent:

 <StackPanel Orientation="Vertical" Margin="10,10"> 
     <StackPanel Orientation="Horizontal"> 
      <Label>Partner</Label> 
      <ComboBox Name="Partner" Margin="10,0" 
        ItemsSource="{Binding XPath=/Root/Tables/Partners/row}" 
        ItemTemplate="{StaticResource Partner}"/> 
     </StackPanel> 
     <Button Margin="25,15" Name="Submit" Width="100" Height="30" IsDefault="True" 
       CommandParameter="{Binding ElementName=Partner, Path=SelectedItem}"> 
       Okay 
     </Button> 
     </StackPanel> 

La source XML ressemble à ceci:

<Root> 
    <Tables> 
    <Partners> 
     <row> 
     <PartnerID>1</PartnerID> 
     <Name>FooBar.Com</Name> 
     </row> 
     <row> 
     . 
     . 
     . 
     </row> 
    </Partners> 
    </Tables> 
</Root> 

Mon problème est que CommandParameter du bouton lie à un XmlElement avec trop d'informations dedans. J'aimerais que CommandParameter fasse référence à un élément enfant, un peu comme si je pouvais spécifier une extension supplémentaire avec "XPath = PartnerID" pour retourner la valeur entière qui m'intéresse vraiment.

+0

Ainsi, pour lequel noeud dans le document XML avez-vous besoin d'une expression XPath qui sélectionne il? –

+0

L'élément "partnerID" du noeud actuellement sélectionné par le ComboBox. –

Répondre

6

Terminé le comprendre moi-même. La solution était de régler le DataContext du bouton pour SelectedItem, puis réglez le CommandParameter du ComboBox à une XPath de liaison, comme ceci:

<Button DataContext="{Binding ElementName=Partner, Path=SelectedItem}" 
     Margin="25,15" Name="Submit" Width="100" Height="30" IsDefault="True" 
     CommandParameter="{Binding XPath=PartnerID/text()}">Okay</Button> 
+0

+1 Votre réponse est exactement ce que je cherchais. À votre santé! –

Questions connexes