.net 如何构建基于绑定数据源确定属性值的控件?

.net 如何构建基于绑定数据源确定属性值的控件?,.net,data-binding,controls,.net,Data Binding,Controls,我有个人和衬衫的数据库。每个人都有自己喜欢穿的衬衫。 为此,我有三张桌子。人、衬衫和汗衫。PersonShirt由带有PersonId和ShirtId的行列表组成。 对于UI,我使用CheckedComboBox。这是选中项的组合框。对于一个特定的人,组合框列出了所有的衬衫,并且根据他喜欢穿什么来检查或取消检查项目。如果选中某个项目,则会将新的PersonShirt添加到数据库中 这只是我们公司的一个项目中多次出现的场景的一个例子。因此,我创建了一个定制的CheckedComboBox,它为“P

我有个人和衬衫的数据库。每个人都有自己喜欢穿的衬衫。 为此,我有三张桌子。人、衬衫和汗衫。PersonShirt由带有PersonId和ShirtId的行列表组成。 对于UI,我使用CheckedComboBox。这是选中项的组合框。对于一个特定的人,组合框列出了所有的衬衫,并且根据他喜欢穿什么来检查或取消检查项目。如果选中某个项目,则会将新的PersonShirt添加到数据库中

这只是我们公司的一个项目中多次出现的场景的一个例子。因此,我创建了一个定制的CheckedComboBox,它为“PersonShirt”接收LinksDataSource,为“ShirtId”接收LinksValue成员


如何基于LinksValueMember字符串从LinksDataSource中的特定项获取属性?LinksDataSource是BindingSource。

我认为正确的方法是使用ITypedList接口。如果绑定列表实现了ITypedList,请调用ITypedList.GetItemProperties(null)以获取属性,并找到您想要其值的属性。然后使用结果PropertyDescriptor获取值:

ITypedList typedList = this.dataSource as ITypedList;
PropertyDescriptor valueDescriptor = typedList.GetItemProperties(null)).FirstOrDefault(d => d.Name == this.linksValueMember);
object value = valueDescriptor.GetValue(listObject);