如何将嵌套对象添加到 DataGrid C# WPF

How to add nested objects to DataGrid C# WPF

我有一组 class 如下所示:

public class Foo
{
    public long id { get; set; }
    public string name{ get; set; }
    public Bar bar { get; set; }
}

public class Bar
{
    public string id{ get; set; }
    public string name{ get; set; }
}

public class Wrapper
{
    public IEnumerable<Foo> foo{ get; set; }
}

反序列化后 JSON 数据网格的项目源被映射到 ienumerable

var myList = JsonConvert.DeserializeObject<Wrapper>(result);

myDataGrid.ItemsSource = myList;

但是我遇到的问题是在网格中只显示了 3 列,即 Foo 的 ID、Foo 的名称和栏 class。我不想显示栏 class 我想显示总共 4 列的栏的 ID 和栏的名称,但不知道如何执行此操作。

我的 xaml 代码如下所示:

<DataGrid CanUserSortColumns="False" ItemsSource="{Binding}" x:Name="myDataGrid"/>

要绑定嵌套对象,您应该定义 DataGridTextColumn(或根据您的要求的其他列类型)。当前显示的列是因为 AutoGenerateColumns 属性 设置为 true(默认值)。您可以更新 XAML 以定义数据网格列并与嵌套对象进行绑定。

<DataGrid CanUserSortColumns="False" ItemsSource="{Binding}" x:Name="myDataGrid" AutoGenerateColumns="False">
   <DataGrid.Columns>
       <DataGridTextColumn Binding="{Binding id }" Header="Id" />
        <DataGridTextColumn Binding="{Binding name}" Header="Name" />
        <DataGridTextColumn Binding="{Binding bar.id}" Header="BarId" />
        <DataGridTextColumn Binding="{Binding bar.name}" Header="BarName" />
   </DataGrid.Columns>
</DataGrid>

不触及XAML,在后面的代码中你可以使用LINQ,比如:

            var myList = new Wrapper(); 
            var itemSource = myList.foo.Select(x => new {
                Id = x.id,
                Name = x.name,
                BarId = x.bar.id,
                BarName = x.bar.name
            }).ToList();
            myDataGrid.ItemsSource = itemSource;