2011-10-12 11 views
5

Ho un file XML (vedi sotto) e posso visualizzare tutti i nomi dei prodotti in una lista. Voglio ogni voce nella casella di riepilogo per visualizzare Nome prodotto seguito da Prezzo, non solo Nome prodotto.Come eseguire il datatemplate per gli articoli nella lista?

Come si esegue il datatemplate nel file XAML? Grazie.

semplificato file XML:

<Product> 
<Name>Red Chair</Name> 
<Price>29.5</Price> 
</Product> 

file XAML semplificata:

<DockPanel>  
<ListBox Name="listBox1" ItemsSource="{Binding}" Margin="10" >  
</ListBox> 
</DockPanel> 

Nel mio C# file, io uso LINQ per raccogliere i prodotti dal file XML e assegnare i prodotti var a listBox1.DataContext e funziona bene. Ora voglio solo aggiungere nel prezzo. Grazie.

risposta

2

A tale scopo, la stessa di qualsiasi altro ItemTemplate.

Assicurarsi di essere vincolati allo Product, non allo Name. È quindi possibile selezionare i valori dall'XML utilizzando XPath, qualcosa di simile.

<DockPanel> 
    <ListBox Name="listBox1" 
      ItemsSource="{Binding}" 
      Margin="10" >  
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <StackPanel> 
      <TextBlock Text={Binding XPath=./Name} /> 
      <TextBlock Text={Binding XPath=./Price} /> 
     </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 
</DockPanel> 
2

Assumendo che l'ItemsSource è di tipo IEnumerable<Product>, con

class Product 
{ 
    public string Name { get; set; } 
    public double Price { get; set; } 
} 

è possibile impostare il modello di elemento come questo:

<ListBox Name="listBox1" ItemsSource="{Binding}" Margin="10" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text = "{Binding Name}" /> 
       <TextBlock Text = "{Binding Price, StringFormat=f2}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

Buono ma OP è vincolante per XML, non per oggetti. –

+0

@Kirk: non sono stato in grado di dedurlo dalla domanda. "raccogliere i prodotti dal file XML" non è un termine tecnico. Con la tua risposta, ora può scegliere. =) – Jens

+0

+1 hai ragione. –

Problemi correlati