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

问题描述

我有一组类似于以下内容的类:

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之后,数据网格的itemsource映射到ienumerable

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

myDataGrid.ItemsSource = myList;

但是我遇到的问题是,在网格中仅显示了3列,分别是Foo的ID,Foo的名称和bar类。我不想显示bar类,而是要显示bar的ID和bar的名称(总共4列),但是无法弄清楚该怎么做。

我的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;