问题描述
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;