2011-10-12 18 views
5

Tengo un archivo XML (consulte a continuación) y puedo mostrar todos los nombres de los productos en un cuadro de lista. Quiero que cada entrada en el cuadro de lista muestre Nombre del producto seguido de Precio, no solo Nombre del producto.¿Cómo hacer datatemplate para los elementos en listbox?

¿Cómo hago el datatemplate en el archivo XAML? Gracias.

archivo XML simplificado:

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

archivo XAML simplificado:

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

En mi archivo de C#, uso de LINQ para recoger los productos del archivo XML y asignar productos var a listBox1.DataContext y funciona bien Ahora solo quiero agregar el precio. Gracias.

Respuesta

2

Esto se hace lo mismo que cualquier otro ItemTemplate.

Asegúrate de estar vinculado al Product, no al Name. Luego puede seleccionar los valores del XML usando XPath, algo como esto.

<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

Asumiendo que su ItemsSource es de tipo IEnumerable<Product>, con

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

puede establecer la plantilla de elementos como esto:

<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

Bueno pero OP es vinculante para XML, no para objetos. –

+0

@Kirk: no pude deducir eso de la pregunta. "recopilar los productos del archivo XML" no es un término técnico. Con su respuesta, ahora puede elegir. =) – Jens

+0

+1 tienes razón. –

Cuestiones relacionadas