Как сделать таблицу данных для элементов в списке? - PullRequest
5 голосов
/ 12 октября 2011

У меня есть файл 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 голосов
/ 12 октября 2011

Вы делаете это так же, как и любой другой ItemTemplate.

Убедитесь, что вы привязываетесь к Product, а не к Name. Затем вы можете выбрать значения из XML, используя XPath, что-то вроде этого.

<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 голосов
/ 12 октября 2011

Предполагая, что ваш 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> 
...