none
XML Binding RRS feed

  • Question

  • Bonjour,

    J'ai un fichier XML structuré ainsi:

    <Emulators>
      <Settings>
        <vol name="10"/>    
        <Volume>10</Volume>
        <Keys name="key1" value="1" />
        <Keys name="key2" value="2" />
        <Keys name="key3" value="3" />
        <Keys name="key4" value="4" />
      </Settings>
      <System>
        <Name>name1</Name>
        <Icon>name1.png</Icon>
        <topplayed>
          <Top>top1</Top>
          <Top>top2</Top>
          <Top>top3</Top>
        </topplayed>
      </System>
    <System>
        <Name>name2</Name>
        <Icon>name2.png</Icon>
        <topplayed>
          <Top>top4</Top>
          <Top>top5</Top>
          <Top>top6</Top>
        </topplayed>
      </System>
    </Emulators>
    Je n'ai pas de difficultés à "binder" le tag <Settings>, ni encore les autres tags contenus à l'intérieur de celui ci.

    Je n'ai pas de difficultés à "binder" le tag <System> à une listbox...par contre je n'arrive pas à faire le bind des <topplayed> dans une autre listbox!!!
    Comment remplir une listbox de tous les éléments <topplayed> contenu dans le tag <System> sélectionné?

    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"         
        Title="MainWindow" Height="721" Width="525" Background="#FF4E4E64">
        <Grid Name="Grid1">
            <Grid.DataContext>
                <XmlDataProvider x:Name="SystemData" Source="C:\Users\Portable\Desktop\taper\WpfApplication1\Resources\Systems2.xml" XPath="Emulators" />
            </Grid.DataContext>
            <Grid.Resources>
                <DataTemplate x:Key="Resource1">
                    <Label Content="{Binding XPath=@name}"/>
                </DataTemplate>
                <DataTemplate x:Key="Resource2">
                    <Label Content="{Binding XPath=@value}"/>
                </DataTemplate>
                <DataTemplate x:Key="Resource3">
                    <Label Content="{Binding XPath=Name}"/>
                </DataTemplate>
                <DataTemplate x:Key="Resource4">
                    <Label Content="{Binding XPath=Top}"/>
                </DataTemplate>
            </Grid.Resources>
            <TextBox Text="{Binding XPath=Settings/Volume}" Height="30" HorizontalAlignment="Left" Margin="12,12,0,0" Name="TextBox5" VerticalAlignment="Top" Width="196" />
            <ListBox ItemsSource="{Binding XPath=Settings/Keys}" ItemTemplate="{StaticResource Resource1}" IsSynchronizedWithCurrentItem="True" Height="92" HorizontalAlignment="Left" Margin="12,48,0,0" Name="ListBox1" VerticalAlignment="Top"
     Width="196" />
            <ListBox ItemsSource="{Binding XPath=Settings/Keys}" ItemTemplate="{StaticResource Resource2}" Height="92" HorizontalAlignment="Left" IsSynchronizedWithCurrentItem="True" Margin="214,48,0,0" Name="ListBox2" VerticalAlignment="Top"
     Width="196" />
            <ListBox ItemsSource="{Binding XPath=System}" ItemTemplate="{StaticResource Resource3}" IsSynchronizedWithCurrentItem="True" Height="104" HorizontalAlignment="Left" Margin="12,185,0,0" Name="ListBox3" VerticalAlignment="Top"
     Width="196" />
            <ListBox ItemsSource="{Binding XPath=System/topplayed}" ItemTemplate="{StaticResource Resource4}" Height="74" HorizontalAlignment="Left" Margin="12,295,0,0" Name="ListBox4" VerticalAlignment="Top" Width="196" />
        </Grid>
    </Window>
    Merci beaucoup!!

    • Modifié jmdeb mercredi 19 septembre 2012 17:02
    mercredi 19 septembre 2012 17:00

Réponses

  • Bonjour,

    Il faut binder le DataContext de votre ListBox4 à la donnée (XML) qui est actuellement sélectionnée dans ListBox3 :

    <ListBox DataContext="{Binding ElementName=ListBox3, Path=SelectedItem}" ItemsSource="{Binding XPath=topplayed}" ItemTemplate="{StaticResource Resource4}" Height="74" HorizontalAlignment="Left" Margin="12,295,0,0" Name="ListBox4" VerticalAlignment="Top" Width="196" />

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse jmdeb vendredi 21 septembre 2012 06:58
    mercredi 19 septembre 2012 21:37
    Modérateur
  • Merci beaucoup Gille!

     

    Juste un petit ajout:

    ItemsSource="{Binding XPath=topplayed/Top}"

    Et adapter également le Template ainsi:

    <DataTemplate x:Key="Resource4">
        <Label Content="{Binding}"/>
    </DataTemplate>

    Merci!


    • Marqué comme réponse jmdeb vendredi 21 septembre 2012 06:58
    mercredi 19 septembre 2012 22:13

Toutes les réponses