如何将嵌套对象添加到 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;
我有一组 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;