我有一个绑定到ObservableCollection的DataGrid。
我想知道的是:不依靠查看项目并检索对象类型,我能以某种方式使用实际的DataGrid对象和ItemSource来查找对象的类型吗?
所以,如果我有以下内容:
DataGrid dg = DataGridObject as DataGrid;
Console.WriteLine("binding5=" + dg.ItemsSource.GetType());
output = System.Collections.ObjectModel.ObservableCollection`1[UserManagement.UserViewModel]
我可以以某种方式将UserManagement.UserViewModel
提取到对象变量
答案 0 :(得分:3)
如果我理解正确,您想要找出里面的对象类型设置为DataGrid.ItemsSource
属性的集合。为此,您可以使用一些基本的反射。试试这个:
var collection = ListBox.ItemsSource;
Type collectionType = collection.GetType();
Type itemType = collectionType.GetGenericArguments().Single();
答案 1 :(得分:1)
假设集合属于ObservableCollection<>
你去吧
Type collectionType = dg.ItemsSource.GetType();
if (collectionType.IsGenericType && collectionType.GetGenericTypeDefinition().IsAssignableFrom(typeof(ObservableCollection<>)))
{
Type objType = collectionType.GenericTypeArguments[0];
}
这里我们将确认类型是否为泛型类型,其泛型定义是否可从ObservableCollection<>
分配,然后将采用第一个类型参数,这将是元素的类型