.NET GUI

.NET Community für WPF, Silverlight und mehr!
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

Binden einer Liste (z.B. ListBox) an Attribute eines XmlDataProviders

Letzter Beitrag 11-12-2008 2:39 von theVisualDeveloper. 3 Antworten.
Seite 1 von 1 (4 Treffer)
Beiträge sortieren: Zurück Weiter
  • 10-28-2008 19:06

    • accelle
    • Top 10 Mitwirkender
    • Registriert am 08-08-2008
    • Beiträge 68
    • Punkte 1.105

    Binden einer Liste (z.B. ListBox) an Attribute eines XmlDataProviders

    Hallo,

    ist es möglich, eine Liste z.B. eine ListBox an einen XmlNode zu binden, so dass bestimmte Attribute des XmlNode die Listeneinträge ergeben, z.B.

    XML-Struktur:
    <Sportarten >
    <Art Name1="Schwimmen" Name2="Laufen" Name3="Springen" />
    </Sportarten>

    Die Bindung sollte an alle Attribute mit dem Namen Name* erfolgen. Mit dieser XML-Datei würde sich dann eine Listbox mit folgenden Einträgen ergeben:

    Schwimmen
    Laufen
    Springen

    Falls es geht bin ich dankbar für Eure Tipps. Wenn es definitiv nicht geht, bin ich auch dankbar für einen Hinweis. Dann mache ich es mit XmlNodes anstatt mit Attributen.

    Gruß
    Peter

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-02-2008 20:53 Antwort zu

    AW: Binden einer Liste (z.B. ListBox) an Attribute eines XmlDataProviders

    Hi Peter,

    wie immer führen viele Wege nach Rom...
    So wie dein XML im Augenblick modeliert ist, verwundert es nicht, das die Lösung nicht gleich auf der Hand liegt.

    Wenn du unter Sportarten einzelne Sportart-Elemente definieren würdest, wäre das wesentlich sauberer und vor
    allem einfacher auf die jeweiligen Elemente zuzugreifen, anstelle umständliche XPath-Filterkriterien zu definieren.

    ...anyway...Vielleicht gibt es ja Gründe dafür...

    Mit etwas XPath-Gehuddel könnte die Lösung deinen Wünschen entsprechend jedenfalls so ausschauen:

    ...

    <Grid>
    <Grid.Resources>

     <XmlDataProvider x:Key="myXMLData" XPath="Sportarten/Art">
    <x:XData>
    <Sportarten xmlns="">
    <Art Name1="Schwimmen" Name2="Laufen" Name3="Springen" OtherAttribute="Foo"/>
    </Sportarten>
    </x:XData>
    </XmlDataProvider>

    </Grid.Resources>

    <ListBox ItemsSource="{Binding Source={StaticResource myXMLData}, XPath=@*[contains(local-name()\,\'Name\')]}"/> </Grid> ...

    Gruß
    Boris


    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-11-2008 18:28 Antwort zu

    • accelle
    • Top 10 Mitwirkender
    • Registriert am 08-08-2008
    • Beiträge 68
    • Punkte 1.105

    AW: Binden einer Liste (z.B. ListBox) an Attribute eines XmlDataProviders

    Hallo Boris,

    sorry für die späte Reaktion und Danke für Dein Beispiel mit dem XPath-Gehuddel.

    Könntest Du mir zum Verständnis noch die XPath-Anweisung auflösen?

    @* bedeutet vermutlich alle Attribute?
    In der eckigen Klammer befindet sich eine Einschränkung?
    contains(...) heißt, dass etwas bestimmtes enthalten sein muss?
    was macht dann local-name()\,\'Name\' ?   Steht \' für ' ?    Wenn ja, dann wäre \'Name\' gleichbedeutend mit 'Name'
    Aber dann?

    Gruß
    Peter
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-12-2008 2:39 Antwort zu

    AW: Binden einer Liste (z.B. ListBox) an Attribute eines XmlDataProviders

    Hi Peter,
    jo, genau....zu deutsch: alle Attribute, eingeschränkt auf diejenigen Attribute des jeweiligen Kontextes deren Namen eine bestimmte Zeichenkette enthält.
    Alles in allem XPath Ausdrücke, die du in einer XPath Referenz wiederfindest.

    Wie bereits gesagt, ich würde tendenziell eher versuchen das ganze mit Elementen abbilden, anstelle Attribute über
    Teile ihres Namens "rauszufischen". Stinkt zu sehr nach "Durch das Knie in die Brust".

    Die verwendeten Backslashes in dem Ausdruck by the way sind lediglich Escape Zeichen um dem Parser bei Anführungsstrichen
    und Kommas unter die Arme zu greifen- sind also nicht XPath spezifisch. Sorry für das Missverständnis.

    Gruß
    Boris
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (4 Treffer)
Powered by Community Server (Commercial Edition)    Hosting powered by 69° media solutions