在一个测试项目中,我在以下情况下设法自动化了WPF DataGrid列,其中数据存储在字典中,并且通过propertyDeScriptor执行绑定:

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

}

我遇到的问题是我正在使用MVVM的现实生活项目,所以 人们viewModel继承了ViewModelBase,因此无法继承列表u003CPerson>。我尝试实施iListu003CPerson>而不是内部列表u003CPerson>并明确将DataContext设置为ILISTu003CPerson>参考但这没用。

我已经看过一篇关于绑定胜利表单datagridview的帖子 这里, ,所以我想知道在WPF中是否适用了相同的逻辑,主要导致icustomTypedScriptor实现在继承列表时拾取了什么u003CT>当您简单地实施ILIST时,这就是缺少的u003CT>反而。

有帮助吗?

解决方案

DataGrid 使用 CollectionView 为了使您的集合生成属性。更具体地说,它铸造了 CollectionViewIItemProperties, ,默认 CollectionView 不实施。如果您不实施 IList (不是通用的),然后默认 CollectionView 将会被使用。

因此,实施非传播 IList 接口应解决此问题(List<T> 实现这两者,这就是为什么您从 List<Person>).

其他提示

由于尚未提及,我遇到了一个相关的问题,其中列在 DataGrid 没有排时没有自动生成;事实证明 DataGrid 没看着我 IItemProperties 实施(我不知道为什么),但纯粹是使用 ICustomTypeDescriptor 在每个行对象上实现以生成列,这也可以工作,但是在没有行时没有列。

解决方案是实施 ITypedList (我离开了 IItemProperties 也仅在收集类型上实现。现在,我在是否有行时为我找到了适当生成的列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top