FormBinding 项目中引用控件的程序集,并将控件类型添加到 if else 列表。
此问题的解决方案是第二次使用反射,以查看各个控件的属性,并找出控件是否具有与业务对象的属性类型对应的属性类型。
用已知属性设置未知控件的值
如上所述,有些控件共享字符串属性 .Text,大多数窗体控件以实质相同的方式使用此属性。该属性用于获取和设置用户输入的数据。有大量控件还使用了其他一些公用属性和属性类型。以下是这些属性中的一些:称为 .SelectedDate 的 DateTime 属性,它在许多日历和日期选取器控件中使用;称为 .Checked 的布尔属性,它在布尔型控件中使用;称为 .Value 的字符串属性,它常见于隐藏控件。这四个属性(string Text、string Value、bool Checked 和 DateTime SelectedDate)是最常见的控件属性。如果可以将系统设计成无论何种控件类型,都绑定到这些属性,那么我们的绑定方法将适用于使用那四个属性的任何控件。
在以下代码中,我们将第二次使用反射(这一次是对窗体控件使用,而不是对业务对象使用),以确定它是否具有任何常用属性。如果有,则尝试将业务对象的属性值设置为控件的属性。作为示例,我们将对整个 PropertyInfo 数组进行迭代,并查找称为 .Text 的字符串属性。如果控件具有该属性,则将数据从业务对象发送到该控件的属性。
if (control is ListControl) {
//
} else {
// 获取控件的类型和属性
//
Type controlType = control.GetType();
PropertyInfo controlPropertiesArray =
controlType.GetProperties();
// 查找 .Text 属性
//
foreach (Pro