IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

XML: Bind vers une liste d'attributs


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Par défaut XML: Bind vers une liste d'attributs
    Bonjour,

    J'ai un fichier XML structuré de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Base>
        <System>
            <Gear>Name1</Gear>
            <Kind name="att1"/>
            <Kind name="att2"/>
            <Kind name="att3"/>
        </System>
    </Base>
    Je sais que si je veux lire <Gear> je devrai faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBox Text="{Binding XPath=Gear}"/>
    Mais si je veux lire l'ensemble des valeurs reprises sous <Kind>, comment dois-je procéder svp?

    Merci beaucoup!!

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Tu dois utiliser [@name]. Il y a un exemple ici http://msdn.microsoft.com/en-us/libr...ing.xpath.aspx

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Par défaut
    Merci pour ta réponse!
    Mon code est articulé comme cela:
    Pour la partie VB:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Class MainWindow
        Dim data As XmlDataProvider = New XmlDataProvider()
        Private Sub MainWindow_Initialized(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Initialized
            data.Source = New Uri(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\mGalaxy\Systems.xml")
            data.XPath = "Emulators/System"
            Grid1.DataContext = data
        End Sub
    End Class
    Pour la partie XAML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <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="372" Width="525" Background="#FF4E4E64">
        <Grid Name="Grid1">
            <Grid.Resources>
                <DataTemplate x:Key="SystemTemplate">
                    <Label Content="{Binding XPath=Name}"/>
                </DataTemplate>
                <local:XPathToFullPath x:Key="XPathToFullPath"/>
            </Grid.Resources>
            <TextBox Text="{Binding XPath=AppPath, UpdateSourceTrigger=PropertyChanged}" Height="23" HorizontalAlignment="Left" Margin="197,180,0,0" Name="TextBox1" VerticalAlignment="Top" Width="220" />
            <TextBox Margin="197,283,113,0">
            <TextBox.Text>
                <Binding Source="data" XPath="*[@topplayed='name']"/>
                </TextBox.Text>
            </TextBox>
        </Grid>
    </Window>
    Mon fichier XML étant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Emulators>
    	<System>
    		<Name>Name1</Name>
    		<Icon>Icon1.png</Icon>
    		<topplayed name="name1"/>
    		<topplayed name="name2"/>
    		<topplayed name="name3"/>
    		<Active>True</Active>
    	</System>
    </Emulators>
    Qu'est ce qui cloche dans ma partie XAML (en gras)..car cela ne semble pas fonctionner!

    Merci!!

  4. #4
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Oups...au temps pour moi...il ne faut pas les []

    Tu peux exposer ton xml avec un XmlDocument au lieu d'un XmlDataProvider :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public XmlDocument xml { get; set; }

    Et dans ton XAML :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      <TextBox x:Name="TheTextBlock" DataContext="{Binding xml}"
               Text="{Binding XPath=/Emulators/System/topplayed[1]/@name}">

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Par défaut
    Merci pour ta réponse!!
    Est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public XmlDocument xml { get; set; }
    est indispensable à la suite?
    Car (remis dans le contexte du code tel que cité plus haut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <TextBox x:Name="TheTextBlock" DataContext="{Binding data}"
               Text="{Binding XPath=/Emulators/System/topplayed[1]/@name}" />
    Me donne un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Data Error: 40 : BindingExpression path error: 'data' property not found on 'object' ''XmlElement' (HashCode=14470557)'. BindingExpression:Path=data; DataItem='XmlDataCollection' (HashCode=49255810); target element is 'TextBox' (Name='TheTextBlock'); target property is 'DataContext' (type 'Object')
    Merci!!

  6. #6
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Je pense que tu peux enlever le data. Avec {binding} c'est suffisant. Ça fonctionnera même peut-être si tu ne mets rien. Ça dépend si le datacontext du contrôle parent est déjà le XmlDocument

Discussions similaires

  1. [JAXB] Desérializer du xml vers une liste ou arraylist
    Par jamelledine_med dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 31/05/2009, 20h17
  2. Réponses: 2
    Dernier message: 12/07/2007, 09h34
  3. Creation ComboBox : comment la faire pointer vers une liste mofiable
    Par Henricoo dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 06/06/2007, 16h09
  4. Userform, TexBox, données vers une Liste
    Par skorpio dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 06/06/2007, 09h42
  5. [JDOM] [XPATH] Récuperer une liste d'attribut
    Par lil_k123 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 31/05/2007, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo