2016-04-05 2 views
8

Ich habe viel gesucht und viel versucht, aber ich kann nicht herausfinden, warum es nicht funktioniert. Ich versuche, eine XML-Datei zu einem Listview über Datenbindung in meinem XAML auszugeben.C# DataBinding eines XML zu einem Listenansicht WPF

<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:Kundenstrom" 
     xmlns:Properties="clr-namespace:Kundenstrom.Properties" x:Class="Kundenstrom.MainWindow" 
     mc:Ignorable="d" 
     Title="Kundenstrom" Height="232.5" Width="631" Icon="Hopstarter-Sleek-Xp-Basic-User-Group.ico"> 
    <Window.Resources> 
     <XmlDataProvider x:Key="Kundenstromdaten" Source="kunden.xml" XPath="Kundenstrom/Kunden"/> 
    </Window.Resources> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="11*"/> 
      <ColumnDefinition Width="77*"/> 
      <ColumnDefinition Width="11*"/> 
      <ColumnDefinition Width="40*"/> 
      <ColumnDefinition Width="21*"/> 
      <ColumnDefinition Width="357*"/> 
     </Grid.ColumnDefinitions> 
     <TabControl x:Name="tabControl" Grid.ColumnSpan="6" TabStripPlacement="Top" Margin="10,0,10,10"> 
      <TabItem Header="Eintragen"> 
       <Grid Background="#FFE5E5E5"> 
        <TextBox x:Name="txtGrund" Height="44" Margin="10,10,10,0" TextWrapping="Wrap" VerticalAlignment="Top"/> 
        <ComboBox x:Name="cmbTyp1" HorizontalAlignment="Left" Margin="10,59,0,0" VerticalAlignment="Top" Width="287"> 
         <ComboBoxItem Content="Laden"/> 
         <ComboBoxItem Content="Telefon"/> 
         <ComboBoxItem Content="Mail"/> 
        </ComboBox> 
        <ComboBox x:Name="cmbTyp2" Margin="302,58,10,0" VerticalAlignment="Top"> 
         <ComboBoxItem Content="Anfrage"/> 
         <ComboBoxItem Content="Auftrag"/> 
         <ComboBoxItem Content="Abholung"/> 
        </ComboBox> 
        <Button x:Name="btnEintragen" Content="Eintragen" HorizontalAlignment="Left" Margin="10,86,0,0" VerticalAlignment="Top" Width="287" Height="36" Click="btnEintragen_Click"/> 
       </Grid> 
      </TabItem> 
      <TabItem Header="Kunden anzeigen"> 
       <Grid Background="#FFE5E5E5"> 
        <ListView Margin="10" ItemsSource="{Binding Source={StaticResource Kundenstromdaten}}"> 
         <ListView.View> 
          <GridView> 
           <GridViewColumn DisplayMemberBinding="{Binding XPath=Grund}" Header="Grund" /> 
           <GridViewColumn DisplayMemberBinding="{Binding XPath=Typ1}" Header="Kundentyp" /> 
           <GridViewColumn DisplayMemberBinding="{Binding XPath=Typ2}" Header="Anfragetyp" /> 
           <GridViewColumn DisplayMemberBinding="{Binding XPath=Zeitpunkt}" Header="Zeitpunkt" /> 
          </GridView> 

         </ListView.View> 
        </ListView> 
       </Grid> 
      </TabItem> 
     </TabControl> 

    </Grid> 
</Window> 

Und meine XML-Datei sieht wie folgt aus

<?xml version="1.0" encoding="utf-8"?> 
<Kundenstrom> 
    <Kunden> 
    <Grund>hfth</Grund> 
    <Typ1>Laden</Typ1> 
    <Typ2>Auftrag</Typ2> 
    <Zeitpunkt>04.04.2016 15:01:38</Zeitpunkt> 
    </Kunden> 
    <Kunden> 
    <Grund>testestsetsetse</Grund> 
    <Typ1>Laden</Typ1> 
    <Typ2>Anfrage</Typ2> 
    <Zeitpunkt>04.04.2016 16:57:59</Zeitpunkt> 
    </Kunden> 
</Kundenstrom> 

Die Daten werden nicht in der Listenansicht zeigt. Brauche ich zusätzlichen CS-Code?

+1

Ihr Code scheint mir gut, haben Sie nach DataBinding-Fehlern gesucht? Wie [so] (http://stackoverflow.com/questions/4026543/is-there-a-good-tool-for-deugging-xamls-databinding-behavior-errors-at-runti). – Kolky

+0

Ich würde eine Baumansicht anstelle einer Listenansicht verwenden. Siehe folgendes Beispiel: http://stackoverflow.com/questions/28976601/recursion-parsing-xml-file-with-attributes-into-treeview-c-sharp – jdweng

+3

Ich habe es gerade getestet und es funktioniert wie erwartet. Existiert die Datei kunden.xml in der Ressource oder im Inhalt? –

Antwort

1

Kein zusätzlicher cs-Code erforderlich.

Quelleigenschaft von XmlDataProvider ist ein Uri, kein Dateipfad. Wenn Sie also nur "kunden.xml" schreiben, sucht Ihre Anwendung in Anwendungsressourcen nach dieser Datei. Um diese Datei zu den Anwendungsressourcen hinzuzufügen, müssen Sie Ihre XML-Datei zu Ihrem Projekt hinzufügen (Hinzufügen-> Vorhandenes Element). In Dateien seine Eigenschaften „Build-Aktion“ auf „Resource“ gesetzt

Wenn Sie Ihre App wollen von Standalone-Datei laden (dh kunden.xml wird im gleichen Ordner, wo Ihre exe ist), können Sie wie folgt vor:

  • Kopieren xml in den Ausgabeordner: manuell oder automatisch, dh Satz kunden.xml "Aktion Build" auf "None", sondern "um Ausgabeverzeichnis kopieren" to =“kunden.xml
  • Quelle ändern " wenn neuere zu Kopieren" "To Source =" pack: // siteoforigin: ,,,/kunden.xml "

Wenn Sie abs Verwenden Sie einfach den Quellnamen der Datei Source = "file: /// D: /my/absolute/path/kunden.xml".