WPF DataGrid AutoColumn通过IcustomTypedScriptor
-
02-10-2019 - |
题
在一个测试项目中,我在以下情况下设法自动化了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
为了使您的集合生成属性。更具体地说,它铸造了 CollectionView
到 IItemProperties
, ,默认 CollectionView
不实施。如果您不实施 IList
(不是通用的),然后默认 CollectionView
将会被使用。
因此,实施非传播 IList
接口应解决此问题(List<T>
实现这两者,这就是为什么您从 List<Person>
).
其他提示
由于尚未提及,我遇到了一个相关的问题,其中列在 DataGrid
没有排时没有自动生成;事实证明 DataGrid
没看着我 IItemProperties
实施(我不知道为什么),但纯粹是使用 ICustomTypeDescriptor
在每个行对象上实现以生成列,这也可以工作,但是在没有行时没有列。
解决方案是实施 ITypedList
(我离开了 IItemProperties
也仅在收集类型上实现。现在,我在是否有行时为我找到了适当生成的列。