Как определить, какое свойство является свойством по умолчанию для привязки данных? - PullRequest
1 голос
/ 08 ноября 2019

Учитывая класс X, который имеет несколько свойств, которые можно привязать, как мне определить, какое из них должно быть свойством по умолчанию для выбора с помощью отражения?

В конструкторе Winforms вы можете выбрать привязку данных. Как Visual Studio определяет, что «EditValue» должно быть свойством по умолчанию для привязки, а не «Text»?

enter image description here

Я уже знаю, какполучить свойства и атрибуты от объекта, но я упускаю что-то, что скажет мне, какой из них использовать по умолчанию.

1 Ответ

3 голосов
/ 08 ноября 2019

Вы можете положиться на атрибут 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: Указывает свойства, которые поддерживают привязку на основе поиска. Элементы управления списками, такие как ComboBox и ListBox, украшены этим атрибутом, [LookupBindingProperties("DataSource", "DisplayMember", "ValueMember", "SelectedValue")].

  • ComplexBindingProperties: указывает источник данных и свойства элемента данныхдля компонента, который поддерживает сложную привязку данных. DataGridView был украшен этим атрибутом, [ComplexBindingProperties("DataSource", "DataMember")].

...