如何为ListBox中的项创建DataTemplate?

5

我有一个XML文件(见下文),可以在列表框中显示所有产品名称。

我希望列表框中的每个条目都显示产品名称,然后是价格,而不仅仅是产品名称。

如何在XAML文件中完成数据模板?谢谢。

简化后的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 products分配给listBox1.DataContext,它可以正常工作。现在我只想添加价格。谢谢。

2个回答

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>

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> 

不错,但 OP 绑定的是 XML 而不是对象。 - Kirk Broadhurst
@Kirk:我无法从问题中推断出来。“从XML文件中收集产品”不是一个技术术语。有了你的答案,他现在可以自己选择了。=) - Jens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接