我有一个对象列表,每个对象都有一个属性列表。 在显示对象列表的网格中,我将属性显示为列,而不是在子网格中显示它们。
public class MyObject {
public int Id {get; set;}
public string Name {get; set;}
public IEnumerable<MyAttribute> Attributes {get; set;}
}
public class MyAttribute {
public int Id {get; set;}
public string Key {get; set;}
public string Value {get; set;}
}
所以我拥有的是IEnumerable<MyObject>
。例如
var lst = new[]
{
new MyObject
{
Id = 1,
Name = "o1",
Attributes = new[]
{
new MyAttribute
{
Id = 1,
Key = "k",
Value = "v1"
},
new MyAttribute
{
Id = 2,
Key = "x",
Value = "v2"
},
}
},
new MyObject
{
Id = 2,
Name = "o2",
Attributes = new[]
{
new MyAttribute
{
Id = 3,
Key = "k",
Value = "v11"
},
new MyAttribute
{
Id = 4,
Key = "x",
Value = "v22"
},
}
}
};
我想最终得到的网格将有4列,Id,Name,k,x。
我有两个问题......
我用来显示网格的组件使用ModelMetadataProviders.Current.GetMetadataForType((Func<object>) null, typeof (TModel))
来确定要显示的列。如何说服ModelMetadataProviders包含这些额外的列?
类似地,获取值ModelMetadataProviders.Current.GetMetadataForProperties(this.Value, typeof (TModel))
的代码,我如何说服它发送这些额外的值?
如果我能找到第二个问题的解决方案,我可能会找到第一个问题的解决方法,因为那只是一个辅助类。