2016-04-05 11 views
8

Ho cercato molto e ho provato molto ma non riesco a capire perché non funziona. Sto provando a produrre un file XML in un listview via databinding nel mio xaml.C# Databinding un XML a listview 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> 

E il mio file XML assomiglia a questo

<?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> 

I dati non sta mostrando nel ListView. Ho bisogno di un ulteriore codice cs?

+1

Il tuo codice mi sembra soddisfacente, hai controllato eventuali errori di DataBinding? Mi piace [così] (http://stackoverflow.com/questions/4026543/is-there-a-good-tool-for-debugging-xamls-databinding-behavior-errors-at-runti). – Kolky

+0

Vorrei usare una treeview invece di una listview. Vedere l'esempio seguente: http://stackoverflow.com/questions/28976601/recursion-parsing-xml-file-with-attributes-into-treeview-c-sharp – jdweng

+3

L'ho appena testato e funziona come previsto. Il kunden.xml esiste nella risorsa o nel contenuto? –

risposta

1

Non è necessario alcun codice di cs aggiuntivo.

La proprietà di origine di XmlDataProvider è un Uri, non un percorso di file. Quindi se scrivi solo "kunden.xml", la tua applicazione sta cercando questo file nelle risorse dell'applicazione. Per aggiungere questo file alle risorse dell'applicazione devi aggiungere il tuo file xml al tuo progetto (Aggiungi-> Oggetto esistente). Nei file impostate le sue proprietà "Build Azione" a "risorsa"

Se si desidera la vostra applicazione per caricare da file standalone (cioè kunden.xml sarà nella stessa cartella in cui il vostro exe è), si deve:

  • Copia xml nella cartella di output: manuale o automatico, cioè set kunden.xml "costruire Azione" a "Nessuno", ma "Copia Output Directory" a "Copia se più recente"
  • Change Source =”kunden.xml "A Source =" pacchetto: // siteoforigin: ,,,/kunden.xml "

Se si desidera utilizzare abs nome oluto del file, usa semplicemente Source = "file: /// D: /my/absolute/path/kunden.xml".