通过ICustomTypeDescriptor生成WPF DataGrid AutoColumn

Gro*_*ile 7 c# wpf icustomtypedescriptor

在测试项目中,我在以下场景中设法自动生成WPF DataGrid列,其中数据存储在Dictionary中,并通过PropertyDescriptors执行绑定:

public class People:List<Person>{
     ...
}
public class Person:Dictionary<string,string>,INotifyPropertyChanged,ICustomTypeDescriptor
{

}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是在我的实际项目中我使用的是MVVM,因此它是People ViewModel,它继承了ViewModelBase,因此无法继承List <Person>.我尝试使用内部List <Person>实现IList <Person>,并显式将DataContext设置为IList <Person>引用,但这不起作用.

我已经看到了绑定一个双赢窗体DataGridView类似的帖子在这里,所以我不知道,如果同样的逻辑也适用于WPF和为主,到底是什么导致了ICustomTypeDescriptor实施继承名单<T>这是当被拾起当你简单地实现IList <T>时会丢失.

Abe*_*cht 6

DataGrid用途CollectionView为您收集生成的属性.更具体地说,它转换为CollectionViewto IItemProperties,默认情况下CollectionView不实现.如果您没有实现IList(不是通用的),那么CollectionView将使用默认值.

因此,实现非泛型IList接口应该解决这个问题(List<T>实现两者,这就是为什么它可以从中派生出来的原因List<Person>).