2011-05-14 59 views
2

我相信我失去了一些東西簡單/顯而易見的,但我似乎無法到ListViewWPF的ListView

<Window x:Class="TestList.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <DataTemplate x:Key="InsideListTemplate"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="test" Width="50"></TextBlock> 
      <TextBlock Text="{Binding OrderId}" Width="50"></TextBlock> 
     </StackPanel> 
    </DataTemplate> 
    <DataTemplate x:Key="OrdersTemplate"> 
     <ListView HorizontalAlignment="Stretch" 
        HorizontalContentAlignment="Stretch" 
        MinWidth="100" 
        MinHeight="25" 
      ItemsSource="{Binding Orders}" 
      ItemTemplate="{StaticResource InsideListTemplate}" 
     > 
     </ListView> 
    </DataTemplate> 
    <DataTemplate x:Key="CustomersTemplate"> 
     <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch"> 
      <TextBlock Text="{Binding CustomerId}" Width="50" Foreground="Navy" VerticalAlignment="Center" /> 
      <ListBox ItemsSource="{Binding Orders}" ItemTemplate="{StaticResource OrdersTemplate}" HorizontalContentAlignment="Stretch"></ListBox> 
     </StackPanel> 
    </DataTemplate> 

</Window.Resources> 
<DockPanel LastChildFill="True"> 
    <ListView Name="listView" ItemTemplate="{StaticResource CustomersTemplate}" > 
    </ListView> 
</DockPanel> 

using System.Collections.Generic; 
namespace TestList 
{ 
public partial class MainWindow 
{ 
    public class Customer 
    { 
     public int CustomerId { get; set; } 
     public List<Order> Orders { get; set; } 
    } 

    public class Order 
    { 
     public int OrderId { get; set; } 
    } 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
     var customers = new List<Customer> 
          { 
           new Customer 
            { 
             CustomerId = 1, 
             Orders = new List<Order> 
                { 
                 new Order {OrderId = 1}, 
                 new Order {OrderId = 2} 
                } 
            }, 
           new Customer 
            { 
             CustomerId = 2, 
             Orders = new List<Order> 
                { 
                 new Order {OrderId = 1}, 
                 new Order {OrderId = 2} 
                } 
            } 
          }; 
     listView.ItemsSource = customers; 
    } 
    } 
} 

enter image description here

內綁定ListView的數據

回答

2

這是哈迪斯答案的解釋:

要綁定一個ListBoxOrders在客戶模板中收集。然後在訂單模板中,您可以再次定義一個ListView綁定到訂單。這意味着該點的綁定路徑是不存在的customer.orders.orders。

如果您只刪除OrdersTemplate並將ListView放在ListBox位於客戶模板中,那麼它就起作用。

+0

謝謝。我知道這一定很簡單。你的解釋非常有意義。 – 2011-05-15 19:08:28

1

如何更改它列出此:

public partial class MainWindow : Window 
{ 
    public class Customer 
    { 
     public int CustomerId { get; set; } 
     public List<Order> Orders { get; set; } 
    } 

    public class Order 
    { 
     public int OrderId { get; set; } 
     public List<OrderItem> Items { get; set; } 
    } 

    public class OrderItem 
    { 
     public int No { get; set; } 
     public string Name { get; set; } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
     var customers = new List<Customer> 
     { 
      new Customer 
      { 
       CustomerId = 1, 
       Orders = new List<Order> 
       { 
        new Order {OrderId = 1, Items = new List<OrderItem>(new[] { new OrderItem { Name = "CD Player", No = 1}, new OrderItem { Name = "VCR Player", No = 2} })}, 
        new Order {OrderId = 2, Items = new List<OrderItem>(new[] { new OrderItem { Name = "DVD Player", No = 1} })} 
       } 
      }, 
      new Customer 
      { 
       CustomerId = 2, 
       Orders = new List<Order> 
       { 
        new Order {OrderId = 1}, 
        new Order {OrderId = 2} 
       } 
      } 
     }; 
     listView.ItemsSource = customers; 
    } 
} 

和XAML中修改這樣的:

<DataTemplate x:Key="InsideListTemplate"> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="{Binding No}" Width="50"></TextBlock> 
     <TextBlock Text="{Binding Name}" Width="50"></TextBlock> 
    </StackPanel> 
</DataTemplate> 
<DataTemplate x:Key="OrdersTemplate"> 
    <StackPanel> 
     <TextBlock Text="{Binding OrderId}" /> 
     <ListView HorizontalAlignment="Stretch" 
       HorizontalContentAlignment="Stretch" 
       MinWidth="100" 
       MinHeight="25" 
       ItemsSource="{Binding Items}" 
       ItemTemplate="{StaticResource InsideListTemplate}" /> 
    </StackPanel> 
</DataTemplate> 

而且你的輸出將顯示詳細信息Binding