首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF DataGrid AutoColumn的ICustomTypeDescriptor生成

WPF DataGrid AutoColumn的ICustomTypeDescriptor生成
EN

Stack Overflow用户
提问于 2010-04-29 14:21:06
回答 2查看 2.4K关注 0票数 7

在一个测试项目中,我设法在以下场景中实现了AutoGenerate WPF DataGrid列,其中数据存储在字典中,并通过PropertyDescriptors执行绑定:

代码语言:javascript
复制
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时缺少该列表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-29 20:33:03

DataGrid使用集合的CollectionView来生成属性。更具体地说,它将CollectionView转换为IItemProperties,默认CollectionView没有实现这一点。如果您不实现IList (而不是泛型的),那么将使用默认的CollectionView

因此,实现非泛型IList接口应该可以解决这一问题(List<T>实现了两者,这就是如果您从List<Person>派生来实现这两种接口的原因)。

票数 6
EN

Stack Overflow用户

发布于 2014-08-11 18:48:17

由于还没有提到,我遇到了一个相关的问题,在没有行的情况下,DataGrid中的列不是自动生成的;事实证明,DataGrid根本没有查看我的IItemProperties实现(我不知道为什么),而是使用每个单独行对象上的ICustomTypeDescriptor实现来生成列,这也有效,但是在没有行的情况下没有列。

解决方案是在集合类型上实现ITypedList (我也保留了IItemProperties实现,以防万一)。现在,无论是否有行,我都可以为自己正确地生成列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2738064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档