我有这个班级的名单:
public class A
{
public string Name{ get; set; }
public int ID { get; set; }
public B[] B_details { get; set; }
public int phone { get; set; }
}
我想在GridView中显示。 B类也有一些属性,其中包含属性Name。 我的网格定义是:
<Grid>
<DataGrid AutoGenerateColumns="True" Name="dataGrid1" IsReadOnly="True" AlternationCount="2" />
</Grid>
问题是,因为它是AutoGenerated GridView - B_details列中的值都以“B [] Array”的形式显示。 如何显示本课程所有B成员的姓名?
答案 0 :(得分:1)
我可以想到两种方式:
1)使用类而不是B[]
,并覆盖其ToString()
方法。所以你有类似的东西:
public class BArray : List<B>
{
public override void ToString()
{
return string.Join(Items.Select(item => item.Name), ", ");
}
}
这样,以逗号分隔的B.Name
列表将打印在DataGrid列中。
2)关闭自动生成的列,并为DataTemplate
列指定B_details
。例如:
<DataGrid.Columns>
<!-- insert other columns -->
<DataGridTemplateColumn Header="B Details">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding B_details}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" Margin="0,0,5,0" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGrid.Columns>