C# WPF DataGrid基于ID显示数据

C# WPF DataGrid基于ID显示数据,c#,wpf,mvvm,binding,C#,Wpf,Mvvm,Binding,假设我有Item类,它具有ObjectId类型的Category属性 class Item { public ObjectId Id; public string Name; public ObjectId Category; } class Category { public ObjectId Id; public string Name; } 我想使用ViewModel.items和ViewModel.Categories集合显示DataGrid中

假设我有Item类,它具有ObjectId类型的Category属性

class Item
{
    public ObjectId Id;
    public string Name;
    public ObjectId Category;
}

class Category
{
    public ObjectId Id;
    public string Name;
}
我想使用ViewModel.itemsViewModel.Categories集合显示DataGrid中的所有项目。像这样的

身份证件 名称 类别 项目Id 项目名称 类别.名称
如果要在
DataGrid
中显示三列,则应创建一个视图模型类,其中每列都有一个属性。我猜这就是您在问题中所指的对象包装器

DataGrid
的视图模型将负责将当前数据转换为
IEnumerable
,其中
T
是具有
Id
Name
Category
属性的视图模型或包装类型

然后将
DataGrid
ItemsSource
绑定到此
IEnumerable
属性,并像往常一样将每列绑定到
T
属性

简而言之,这是一个MVVM解决方案。

这里有一些伪代码(未真正检查)可以添加到我的评论/@mm8的解决方案中:

public class GridItem(){
  public string ItemName {get;set;}
  public string CategoryName {get;set;}
}
然后使用一些方法来查询和建立您的
GridItem
集合:

public IEnumerable<GridItem> GetGridItems(){
  return _repository.Items.Select(i => new GridItem{
    ItemName = i.Name,
    CategoryName = i.Category.Name
  })
}
public IEnumerable GetGridItems(){
return _repository.Items.Select(i=>newgriditem{
ItemName=i.名称,
CategoryName=i.Category.Name
})
}

显示代码,而不是描述代码。当我们能够准确地看到您在做什么时,帮助解决您的问题就容易多了。“我如何获取类别实例以显示有关它的一些信息我如何获取类别实例以显示有关它的一些信息”——“类别实例”是什么,“它”是什么?@Jonathan抱歉,我不够清楚,我需要用相应的Id显示类别的名称。就像我们在代码GetCategory(Item.Category)中编写的那样。name.Ah,我明白了。然后,是的,就像下面@mm8所说的,您应该创建一个viewmodel来表示网格中的行,用值构建它,然后将其返回到视图中。MVVM(或者在较小程度上,MVC)模式。