如何确定哪个 属性 是数据绑定的默认 属性?

How to determine which property is the default property for databinding?

鉴于 X 的 Class 具有多个可绑定的属性,我如何通过反射确定哪个应该是默认的 属性 到 select?

在 Winforms 设计器中,您可以 select 数据绑定。 Visual Studio 如何确定 "EditValue" 应该是要绑定的默认 属性 而不是说 "Text"?

我已经知道如何从对象中获取特性和属性,但我缺少一些可以告诉我默认使用哪一个的信息。

您可以依赖 class 的 DefaultBindingProperty 属性。

例如 DateTimePicker[DefaultBindingProperty("Value")] 修饰,而 ComboBox[DefaultBindingProperty("Text")] 修饰。

您可以创建如下函数,以获取控件的默认绑定 属性 的名称:

public string GetDefaultBindingPropertyValue(Control c)
{
    var att = c.GetType().GetCustomAttributes(true)
        .OfType<DefaultBindingProperty>().FirstOrDefault();
    return att?.Name;
}

旁注

对于一些复杂的场景,您可能也对这些属性感兴趣:

  • LookupBindingProperties:指定支持基于查找的绑定的属性。 ComboBoxListBox 等列表控件由此属性装饰,[LookupBindingProperties("DataSource", "DisplayMember", "ValueMember", "SelectedValue")].

  • ComplexBindingProperties:为支持复杂数据绑定的组件指定数据源和数据成员属性。 DataGridView 已被此属性修饰,[ComplexBindingProperties("DataSource", "DataMember")].