2011-10-12 11 views
5

Mam plik XML (patrz poniżej) i mogę wyświetlić wszystkie nazwy produktów w polu listy. Chcę, aby każdy wpis w polu listy wyświetlał nazwę produktu, a następnie cenę, a nie tylko nazwę produktu.Jak wykonać datatemplate dla elementów w liście?

Jak wykonać datatemplate w pliku XAML? Dzięki.

uproszczony plik XML:

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

Zmniejsz plik XAML:

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

W moim pliku C#, używam LINQ zbierać produkty z pliku XML i przypisać do produktów var listBox1.DataContext i działa dobrze. Teraz chcę tylko dodać cenę. Dzięki.

Odpowiedz

2

to zrobić tak samo, jak każdy inny ItemTemplate.

Upewnij się, że łączysz się z Product, a nie Name. Następnie możesz wybrać wartości z XML używając XPath, coś w tym stylu.

<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

Zakładając, że ItemsSource jest typu IEnumerable<Product> z

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

można ustawić szablon elementu takiego:

<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

Dobrze, ale OP jest wiążący dla XML, a nie obiektów. –

+0

@Kirk: Nie mogłem wywnioskować tego z pytania. "zbieraj produkty z pliku XML" nie jest terminem technicznym. Dzięki swojej odpowiedzi może teraz wybrać. =) – Jens

+0

+1 masz rację. –

Powiązane problemy