0

itemsource(ユーザーに表示したいもの)を定義する現在のコードがあります:

public class View
{
public string Name { get; set; }
public string Quantity { get; set; }
public List<Item> items { get; set; }
}

public class Item
{
public string ItemName { get; set; }
public double ItemQuantity { get; set; }
}

使用されるデータセット:

List<View> myViews

したがって、次のようなデータになります。

ViewA 50 {ItemA 50, ItemB 10, ItemC 20)
ViewB 10 {ItemC 10, ItemD 10, ItemE 10)

現在の私のデータグリッドでは、最初の2つの列が完全に表示されていますが、リストには「コレクション」(実際のデータではない)と表示されます。これは予想どおりだったと思います。

これは今の私のXAMLです

        <DataGrid Grid.Row="2" Margin="0,146,0,350"
              ItemsSource="{Binding myViews}"
              AutoGenerateColumns="False" Height="104">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Width="*" FontSize="16"
                                Binding="{Binding Path=Name}" />
                <DataGridTextColumn Header="Quantity" Width="*" FontSize="16"
                                Binding="{Binding Path=Quantity}" />
                <DataGridTextColumn Header="Items" Width="*" FontSize="16"
                                Binding="{Binding Path=items}" />
            </DataGrid.Columns>
        </DataGrid>

リストアイテムをユーザーに表示する方法を見つけようとしています(このデータグリッドまたはこれが適切でない場合は他の方法で)。

私の考えは、実際には3番目の列に独自のアイテムのソースを持つ別のデータグリッドを配置することでしたが、3番目の列を(今日のようなテキストとは対照的に)データグリッドにする方法がわからないようです。誰かがこれを行う方法を知っていますか(いくつかの例は恐ろしいでしょう)。

または、これがこの問題を解決するための正しい方法ではない場合は、他のアイデアも大歓迎です。

ありがとう、

4

1 に答える 1

1

RowDetailsTemplateItemオブジェクトのリストを表示するために使用できます。

 <DataGrid Grid.Row="2"  Margin="0,146,0,350"
      ItemsSource="{Binding myViews}"
      AutoGenerateColumns="False" Height="104">
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding items}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Item Name" Width="Auto" FontSize="16"
                            Binding="{Binding Path=ItemName}" />
                    <DataGridTextColumn Header="Item Quantity " Width="Auto" FontSize="16"
                            Binding="{Binding Path=ItemQuantity }" />
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>

    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Width="*" FontSize="16"
                        Binding="{Binding Path=Name}" />
        <DataGridTextColumn Header="Quantity" Width="*" FontSize="16"
                        Binding="{Binding Path=Quantity}" />                
    </DataGrid.Columns>
</DataGrid>

3番目の列にItemオブジェクトの現在のリストが必要な場合は、を使用する必要がありますDataGridTemplateColumn

<DataGrid Grid.Row="2" Margin="0,146,0,350"
      ItemsSource="{Binding myViews}"
      AutoGenerateColumns="False" Height="104">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Width="*" FontSize="16"
                        Binding="{Binding Path=Name}" />
        <DataGridTextColumn Header="Quantity" Width="*" FontSize="16"
                        Binding="{Binding Path=Quantity}" />
        <DataGridTemplateColumn Header="Items">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding items}">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Item Name" Width="Auto" FontSize="16"
                            Binding="{Binding Path=ItemName}" />
                            <DataGridTextColumn Header="Item Quantity " Width="Auto" FontSize="16"
                            Binding="{Binding Path=ItemQuantity }" />
                        </DataGrid.Columns>
                    </DataGrid>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>               
    </DataGrid.Columns>
</DataGrid>
于 2013-01-20T21:20:56.473 に答える