2013-01-20 80 views
0

我當前的代碼定義我的ItemSource(我要顯示給用戶什麼):使用Datagrid在Datagrid中,Datagrid的其中一列作爲Datagrid本身?

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) 

在我的DataGrid,現在它顯示了完美的前兩列,但列表中顯示爲「收集」(不是實際的數據),這是我的猜測是可以預期的。

這是我的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> 

我試圖找到一種方式來表示列表項提供給用戶(在這個數據網格或其他方式,如果這不是正確的方法)。

我的想法是實際上有第三列中的另一個Datagrid與自己的項目來源,但我似乎無法瞭解如何使第三列Datagrid(而不是像今天的文字)。有誰知道如何做到這一點(一些例子會很難理解)。

或者,如果這是真的不解決這個問題的正確方法,任何其他的想法也將大加讚賞。

感謝,

回答

1

您可以使用RowDetailsTemplate呈現Item對象名單。

<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> 

如果您想在第三列中列出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>