首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListView中的WPF ListView

ListView中的WPF ListView
EN

Stack Overflow用户
提问于 2011-05-14 09:44:19
回答 2查看 8.4K关注 0票数 4

我确信我遗漏了一些简单/明显的东西,但是我似乎不能在ListView中绑定ListView的数据

代码语言:javascript
复制
<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>

代码语言:javascript
复制
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;
    }
  }
}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-15 08:11:55

这是对Hadis答案的解释:

您正在将ListBox绑定到客户模板中的Orders集合。然后在orders模板中再次定义订单的ListView绑定。这意味着该点上的绑定路径是不存在的customer.orders.orders。

如果您只需删除OrdersTemplate并将ListView放在客户模板中ListBox所在的位置,它就可以工作。

票数 3
EN

Stack Overflow用户

发布于 2011-05-14 14:47:07

把它改一下怎么样?列出这个:

代码语言:javascript
复制
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上,像这样修改它:

代码语言:javascript
复制
<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>

并且您的输出将显示详细信息

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5999317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档