1

このようにデータを表示したい

ここに画像の説明を入力

クラス定義は次のとおりです。

public class Order
{
    public string Customer { get; set; }
    public decimal Amount { get; set; }
    public List<OrderDetail> Details = new List<OrderDetail>();
}

public class OrderDetail
{
    public string Product { get; set; }
    public int Qty { get; set; }
}

ListBox を使用しようとしましたが、詳細を表示できません。以下はxamlでの私の試みです:

<ListBox x:Name="lstOrder">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Customer}"/>
                <TextBlock Text="{Binding Amount}"/>
                <ListBox ItemsSource="{Binding Details}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding Product}"/>
                                <TextBlock Text="{Binding Qty}"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

コードビハインド:

public MainWindow()
{
    InitializeComponent();

    List<Order> OrderList = new List<Order>();
    Order order = new Order { Customer = "David", Amount = 2000 };
    order.Details.Add(new OrderDetail { Product = "A", Qty = 5 });
    OrderList.Add(order);

    order = new Order { Customer = "John", Amount = 5000 };
    order.Details.Add(new OrderDetail { Product = "A", Qty = 2 });
    order.Details.Add(new OrderDetail { Product = "B", Qty = 3 });
    OrderList.Add(order);

    lstOrder.ItemsSource = OrderList;
}

OrderList.Details をバインドする正しい方法は何ですか? 任意の提案をいただければ幸いです。

4

1 に答える 1

2

あなたのOrderクラスDetailsでは、プロパティではなくフィールドです。フィールドへのバインドはサポートされていません。

クラスをわずかに変更して、次のようにすることができます。

public class Order
{
    public string Customer { get; set; }
    public decimal Amount { get; set; }

    List<OrderDetail> details;
    public List<OrderDetail> Details { get { return details; } }

    public Order()
    {
        details = new List<OrderDetail>();
    }
}

そして、それは正しくバインドされます。

于 2013-01-21T09:13:56.997 に答える