2010-08-26 3 views
1

Je souhaite créer une zone de liste qui sera liée à XPath, par rapport à l'élément actuellement sélectionné de la liste.Liaison de données dépendant de XAML/Blender

Il utilise XmlDataProvider pour les données et le fichier XML ressemble à ceci:

<Programs> 
    <Program name="..."> 
     <Step name="..."/> 
     <Step name="..."/> 
    </Program> 
    <Program name="another"> 

    ... 

</Programs 

Ainsi, la zone de liste « parent » est la liste tous les programmes, tandis que « enfant » montre les étapes seulement à partir du courant programme. Qu'est-ce qu'un tel type de liaison appelé?

Répondre

2

C'est parti. J'espère que ça répond à ta question.

<Window x:Class="StackOverflow.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:StackOverflow" 
     xmlns:uc="clr-namespace:StackOverflow.UserControls" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <XmlDataProvider x:Key="xml"> 
      <x:XData> 
       <Programs xmlns=""> 
        <Program name="Program"> 
         <Step name="Step1"/> 
         <Step name="Step2"/> 
        </Program> 
        <Program name="Program2"> 
         <Step name="Step3"/> 
         <Step name="Step4"/> 
        </Program> 
       </Programs> 
      </x:XData> 
     </XmlDataProvider> 
    </Window.Resources> 

    <Grid> 
     <StackPanel> 
      <ListBox x:Name="parent" ItemsSource="{Binding Source={StaticResource xml}, XPath=Programs/Program}" 
        Height="100"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding [email protected]}"/> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

      <ListBox DataContext="{Binding ElementName=parent, Path=SelectedItem}" ItemsSource="{Binding XPath=Step}" 
        Height="100"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding [email protected]}"/> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </StackPanel> 

    </Grid> 
</Window> 
+0

Désolé, il m'a fallu un certain temps pour répondre, je n'étais pas près de l'ordinateur pendant un moment. Merci, cela efface certaines choses! – Johnny