我有一个实现ITypedList的帮助程序类,以提供针对自定义集合进行数据绑定的对象。
我的实现使我可以轻松地指定我希望对象的子属性可用于数据绑定,例如,我可以绑定到“ Id”,“ Name”以及“ Children.Count”。
现在,我的问题是,为了提供帮助对象以将数据绑定到此类列,我需要预先用这些对象填充集合,然后稍后当网格通过接口请求此类帮助对象时,它将在我的对象上调用一个方法来检索它们。
它调用的方法具有一个参数,该参数可用于指定要检索的访问器对象,但.NET DataGridView类始终为null,这意味着我只需要返回获得的所有对象。
所以我的问题是这个。是否可以使用ITypedList的替代方法来实现,在该方法中将明确告诉网格感兴趣的属性,从而不必预先填充访问对象的集合?
这是我的代码现在的样子:
var wrapper = new TypedListWrapper<Person>(someNormalCollectionClass);
wrapper.BindableProperties = "Id;Name;Children.Count";
grid.DataSource = wrapper;
这是我想要的样子:
grid.DataSource = new TypedListWrapper<Person>(someNormalCollectionClass);
有没有人?
最佳答案
如果要创建自己的网格,那么当然可以实现类似的功能,但不能使用DataGridView
(或者,我想像是任何当前的第三方网格控件)。我也会对这在设计时的限制保持警惕。如果PropertyDescriptor
初始化是引起您关注的原因,那么我建议仅使用名称和类型加载单个PropertyDescriptor
对象,并对该对象进行实际使用会导致它加载可能需要的任何其他信息。
通常,这些操作应该是廉价的操作。如果您对在合理的时间内获取属性列表的能力感到不安,则可能需要检查瓶颈在体系结构中的位置,并尝试找到解决方法。但是除此之外,我看不到任何选择。根据设计,数据绑定系统与消费者无关。具有约束力的消费者无法通过任何手段表明他是否打算使用描述符。像那样的事情真是令人头疼的蛋。