ITypedList替代?

时间:2009-07-27 18:16:59

标签: c# data-binding collections

我有一个实现ITypedList的帮助器类,为自定义集合提供数据绑定的对象。

我的实现允许我轻松指定我希望对象的子属性可用于数据绑定,例如我可以绑定到“Id”,“Name”以及“Children.Count”。

现在,我的问题是,为了提供数据绑定到这些列的辅助对象,我需要使用这些对象预先填充集合,然后在网格通过这些对象请求这些对象时接口,它将调用我的对象上的方法来检索它们。

它调用的方法有一个参数,可用于指定要检索的访问者对象,但对于.NET DataGridView类,它总是为null,这意味着我只需返回我得到的所有对象。

所以我的问题是这个。我是否可以实现ITypedList的替代方案,我将明确告知网格感兴趣哪些属性,以便我不必预先填充acccessor对象的集合?

以下是我的代码现在的样子:

var wrapper = new TypedListWrapper<Person>(someNormalCollectionClass);
wrapper.BindableProperties = "Id;Name;Children.Count";
grid.DataSource = wrapper;

这就是我想要的样子:

grid.DataSource = new TypedListWrapper<Person>(someNormalCollectionClass);

任何参赛者?

1 个答案:

答案 0 :(得分:4)

如果您要创建自己的网格,那么当然您可以实现这样的功能,但不能使用DataGridView(或者,我想,任何当前的第三方网格控件)。我也会对这会产生的设计时间限制保持警惕。如果PropertyDescriptor初始化是引起您关注的问题,那么我建议仅使用名称和类型加载单个PropertyDescriptor对象,并使用该对象的实际用法加载可能需要的任何其他信息。

一般而言,这些应该是廉价的操作。如果您对在合理的时间内获取属性列表的能力感到焦虑,则可能需要检查架构中瓶颈的位置并尝试找到解决方法。除此之外,我没有看到你的选择。根据设计,数据绑定系统是消费者不可知的。绑定消费者无法表明他是否打算使用描述符。有这样的事情将是一个真正的鸡或鸡蛋头痛。