2012-01-04 36 views
1

我有一个看起来像这样两个数据结构 -DataGrid中的行详细信息 - 我可以将它们绑定到“内部”集合吗?

class Car 
{ 
    string CarModel; 
    string CarColor; 
    string CarAge; 
} 

class Person 
{ 
    int ID; 
    string FirstName; 
    string Surname; 
    ObservableCollection<Car> Cars; 
} 

public ObservableCollection<Person> People { get; set; } 

所以我有一个类型的人的集合中型车的集合。我想在DataGrid,看起来像这样每个人都可以拥有零辆或更多的汽车来显示这一点 -

enter image description here

下面的XAML代码利用行的照顾,但它不处理行详细信息 -

<DataGrid ItemsSource="{Binding People}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
      <DataGridTextColumn Header="Firstname" Binding="{Binding Firstname}"/> 
      <DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

任何人都知道,如果它可以显示与行的细节一个DataGrid绑定到一个内集合,(在这种情况下ObservableCollection<Car> Cars)?

+0

ItemsControl是否必须是一个'DataGrid'?我看到你的示例的第一个直觉就是想使用'ItemsControl'。 DataGrid提供了更高级的功能,例如内置的编辑,选择和排序功能,但是如果您只想显示一组项目,则ItemsControl更容易以您指定的格式进行设置 – Rachel 2012-01-04 18:50:53

+0

我不需要编辑,但是我确实需要选择和排序功能。 – 2012-01-04 18:52:06

回答

3

只要把喜欢的东西在RowDetailsTemplate

<DataGrid ItemsSource="{Binding People}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
     <DataGridTextColumn Header="Firstname" Binding="{Binding Firstname}"/> 
     <DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/> 
    </DataGrid.Columns> 

    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <ItemsControl ItemsSource="{Binding Cars}" ItemTemplate="{StaticResource CarTemplate}" /> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 
相关问题