【问题标题】:How to do datatemplate for items in listbox?如何为列表框中的项目做数据模板?
【发布时间】:2011-10-12 06:42:14
【问题描述】:

我有一个 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,它工作正常。现在我只想添加价格。谢谢。

【问题讨论】:

    标签: wpf xml linq xaml datatemplate


    【解决方案1】:

    您的操作与其他任何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&lt;Product&gt; 类型,带有

      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:我无法从问题中推断出这一点。 “从 XML 文件中收集产品”不是一个技术术语。有了你的回答,他现在可以选择了。 =)
      猜你喜欢
      • 2011-11-08
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多