2010-11-23 17 views
0

Ich möchte programmatisch binden eine XML-Datei, die einige Ergebnisse aus der Datenbank in mein Datagrid gezogen. Meine XML wie folgt aussieht:WPF Datagrid-Bindung an xml

<root> 
    <resultset> 
     <header> 
      <column> Col 1 </column> 
      <column> Col 2 </column> 
     </header> 

     <data> 
      <row> 
       <field>Value field 1</field> 
       <field>Value field 2</field> 
      </row> 
      <row> 
       <field>Value field 1</field> 
       <field>Value field 2</field> 
      </row> 
     </data> 
    </resultset> 
</root> 

Ich versuche, die Header an den Datagrid-Header auf der Karte, und die Zeilen zu den Zeilen ... Die einzige Sache ist, dass ich irgendwie bin stecken, ich bin verloren unter die programmatischen Eigenschaften, könnte mir jemand nur einen Hinweis geben, worauf ich achten muss?

Ich habe zu tun versucht:

myDataGrid.ItemsSource = myXmlDoc 

Aber es ist nicht wirklich nichts hilft erscheint hehe, ich habe über einige „Pfad“ Bindungseigenschaft lesen, aber ich kann es nicht finden.

Antwort

1

Ich nehme an, Sie haben bereits xmldataprovider mit Ihrer Xml-Quelle namens myXMLDoc. dann können Sie XML-Daten an Ihre WPF-Steuerelemente binden.

ItemsSource="{Binding Source={StaticResource myXMLDoc}, XPath=row}}" //bind "row" elements to your control 
+0

WOW, ich wusste nicht, ich könnte Ausdrücke programmatisch setzen ... Mann, das ist super! vielen Dank. Es gibt mir die Reihen (aber noch leer), aber es ist besser als das, was ich hatte, bevor ich graben werde, um herauszufinden, was los ist. Nochmals vielen Dank, – CoolStraw

+0

Nur eine Frage, wie machst du die Tags an die DataGrid-Header-Spalten zu binden? Ich habe versucht, mydatagrid.columns zu betrachten, aber es ist eine Sammlung, es hat nicht wirklich ItemsSource oder so etwas. Danke :) – CoolStraw

+0

@Miloud check it out http://stackoverflow.com/questions/320089/how-do-i-bind-a-wpf-datagrid-to-a-variable-number-of-columns – Arseny

1

Ist das wonach Sie suchen?

http://joshsmithonwpf.wordpress.com/2007/06/04/binding-to-xml/

denke ich, was Sie wollen, ist Itemssource-up tun Haken zu einem XmlDataProvider (die Sie auch in Code erstellen können), mit seinen XPath Satz zu /root/resultset/data/row. Dann für jedes Element, das Sie verwenden können, sagen Sie Text = {Binding XPath=./field}.

Ich bin ein wenig unsicher in den Details, da ich das schon eine Weile nicht mehr gemacht habe, aber das wird hoffentlich in die richtige Richtung gehen.

+0

Danke für Ihre Antwort Rei. Die Sache ist, dass ich das ** programmatisch erreichen will ** (kann es nicht in XAML aufgrund von App-Zweck/arch. Tun). Und die Sache ist, dass ich auf programmatische Weise keine verbindlichen Ausdrücke mehr verwenden kann, weshalb ich unter all diesen Eigenschaften irgendwie verloren bin. Ich lese gerade einen MSN-Artikel über Datenbindung, aber es ist immer noch verwirrend. (** neu ** zu wpf übrigens: p) – CoolStraw