【发布时间】:2016-03-29 11:12:03
【问题描述】:
我需要使用 WPF 中 DataGrid 控件的 System.Collections.IEnumerable 获取模型类属性列表。
DataGrid 控件有一个属性public IEnumerable ItemsSource { get; set; }
考虑为 ItemsSource 分配了以下列表:List<Person> EmpList
void Main()
{
List<Person> EmpList = new List<Person>()
{
new Person() {ID = 101, Name = "Peter", Gender = "Male", Role = "Manager"},
new Person() {ID = 102, Name = "Emma Watson", Gender = "Female", Role = "Assistant"},
new Person() {ID = 103, Name = "Kaliya", Gender = "Manager", Role = "Assistant"},
};
}
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public string Role { get; set; }
}
我需要使用 public IEnumerable ItemsSource { get; set; } 获取属性名称
我用List<Person> EmpList试了一下
EmpList.GetType()
.GetInterfaces()
.Where(t => t.IsGenericType == true
&& t.GetGenericTypeDefinition() == typeof(IEnumerable<>))
.Select(t => t.GetGenericArguments()[0])
.FirstOrDefault().GetProperties()
.Select(x => x.Name).ToList();
上述查询的输出是
像这样我需要使用 DataGrid ItemsSource
获取模型属性我在 Datagrid 控件类中使用this.ItemsSource 进行了尝试,但无法获取列表。但是 ItemsSource 填充了 3 个集合,与上述集合相同。
this.ItemsSource.GetType()
.GetInterfaces()
.Where(t => t.IsGenericType == true
&& t.GetGenericTypeDefinition() == typeof(IEnumerable<>))
.Select(t => t.GetGenericArguments()[0])
.FirstOrDefault().GetProperties()
.Select(x => x.Name).ToList().Dump();
我需要与上面提到的相同的输出,使用this.ItemsSource。请帮助我如何实现这一目标???
我尝试了@bhuvin 方法 - Reflection,但结果为空
类型信息和属性信息逐步快照
类型信息:
物业信息:
【问题讨论】:
标签: c# wpf linq datagrid itemssource