如何为列表框中的项目执行datatemplate?

时间:2011-10-12 06:42:15

标签: wpf xml linq xaml datatemplate

我有一个XML文件(见下文),可以在列表框中显示所有产品名称。 我希望列表框中的每个条目都显示Product Name,后跟Price,而不仅仅是Product Name。

如何在XAML文件中执行datatemplate?感谢。

简化的XML文件:

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

简化的XAML文件:

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

在我的C#文件中,我使用LINQ从XML文件中收集产品并将var产品分配给listBox1.DataContext,它工作正常。现在我只想添加价格。感谢。

2 个答案:

答案 0 :(得分:2)

假设您的ItemsSource类型为IEnumerable<Product>,带

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

您可以像这样设置项目模板:

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

答案 1 :(得分:2)

您执行此操作与任何其他ItemTemplate相同。

确保您绑定到Product,而不是Name。然后,您可以使用XPath从XML中选择值。

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