Tag: icustomtypedescriptor

什么是ICustomTypeDescriptor以及何时使用它?

我不明白它是什么以及何时使用它。 MSDN没有帮助我。 MSDN声明ICustomTypeDescriptor提供一个为对象提供动态自定义类型信息的接口。

我如何解决这个lambda表达式外部变量问题?

我正在使用PropertyDescriptor和ICustomTypeDescriptor( 仍然 )尝试将WPF DataGrid绑定到一个对象,数据存储在一个Dictionary中。 因为如果你向WPF DataGrid传递一个Dictionary对象列表,它将根据字典的公共属性(Comparer,Count,Keys和Values)自动生成列,我的Person子类为Dictionary,并实现ICustomTypeDescriptor。 ICustomTypeDescriptor定义了一个返回PropertyDescriptorCollection的GetProperties方法。 PropertyDescriptor是抽象的,所以你必须将它子类化,我想我有一个构造函数,它接受Func和一个Action参数,它们委托字典中值的获取和设置。 然后我为字典中的每个Key创建一个PersonPropertyDescriptor,如下所示: foreach (string s in this.Keys) { var descriptor = new PersonPropertyDescriptor( s, new Func(() => { return this[s]; }), new Action(o => { this[s] = o; })); propList.Add(descriptor); } 问题是每个属性得到它自己的Func和Action但它们都共享外部变量s所以尽管DataGrid自动生成“ID”,“FirstName”,“LastName”,“Age”,“Gender”的列,它们都得到了设置为“性别”,这是foreach循环中s的最终静止值。 如何确保每个委托使用所需的字典密钥,即Func / Action实例化时的s值? 非常感谢。 这是我的其余想法,我只是在这里试验这些不是’真正’的类…… // DataGrid binds to a People instance public class People : […]

DataGridView没有显示实现ICustomTypeDescriptor的对象的正确性

我在DataGridView中显示对象列表。 一切都很好。 根据对象的属性将列自动添加到DataGridView中 。 现在我改变了我在网格中显示的类来实现ICustomTypeDescriptor 。 但是现在,当我将其DataSource设置为我的自定义对象列表时,网格现在不再显示任何列或行。 我猜这与ICustomTypeDescriptor的事实有关,每个网格的每一行中显示的每个实例都可以返回一组不同的属性。 我正在实现ICustomTypeDescriptor,以便我可以允许用户在运行时动态地向对象添加自定义属性。 这些自定义属性应该是可见的,并可通过DataGridView进行编辑。 为什么DataGridView看不到我的ICustomTypeDescriptor方法? 有没有其他方法可以动态地将属性添加到将在DataGridView中显示的对象?