在一个测试项目中,我设法在以下场景中实现了AutoGenerate WPF DataGrid列,其中数据存储在字典中,并通过PropertyDescriptors执行绑定:
public class People:List<Person>{
...
}
public class Person:Dictionary<string,string>,INotifyPropertyChanged,ICustomTypeDescriptor
{
}我遇到的问题是在我的实际项目中,我使用的是MVVM,所以它是_People_ViewModel,它继承了ViewModelBase,因此不能继承列表。我尝试过用内部列表来实现IList,并显式地将DataContext设置为IList引用,但这是行不通的。
我看过类似的关于绑定win forms DataGridView here的文章,所以我想知道WPF中是否适用同样的逻辑,主要是什么原因导致ICustomTypeDescriptor实现在继承列表时被选中,而当您只是实现IList时缺少该列表。
发布于 2010-04-29 20:33:03
DataGrid使用集合的CollectionView来生成属性。更具体地说,它将CollectionView转换为IItemProperties,默认CollectionView没有实现这一点。如果您不实现IList (而不是泛型的),那么将使用默认的CollectionView。
因此,实现非泛型IList接口应该可以解决这一问题(List<T>实现了两者,这就是如果您从List<Person>派生来实现这两种接口的原因)。
发布于 2014-08-11 18:48:17
由于还没有提到,我遇到了一个相关的问题,在没有行的情况下,DataGrid中的列不是自动生成的;事实证明,DataGrid根本没有查看我的IItemProperties实现(我不知道为什么),而是使用每个单独行对象上的ICustomTypeDescriptor实现来生成列,这也有效,但是在没有行的情况下没有列。
解决方案是在集合类型上实现ITypedList (我也保留了IItemProperties实现,以防万一)。现在,无论是否有行,我都可以为自己正确地生成列。
https://stackoverflow.com/questions/2738064
复制相似问题