Запрос DataBindings
текстового поля. DataSource
из Binding
может содержать разные вещи:
- A
Type
объект, описывающий тип объекта, к которому может быть привязано свойство. Это может быть в том случае, если форма загружается и объект еще не прикреплен.
- A
BindingSource
. В этом случае мы должны запросить DataSource
этого источника привязки.
- Объект данных или
null
.
В случае, если у нас есть BindingSource
, мы можем снова иметь Type
объект. Чтобы получить тип объекта, с которым должна связываться привязка, я написал этот вспомогательный метод, который вызывает себя рекурсивно. (с использованием синтаксиса C # 7.0)
private Type GetBoundType(object dataSource)
{
switch (dataSource) {
case Type type:
return type;
case BindingSource bindingSource:
return GetBoundType(bindingSource.DataSource);
default:
return dataSource?.GetType();
}
}
Вы можете назвать это так (используя синтаксис C # 7.0) :
Binding binding = textBox.DataBindings["Text"];
if (binding != null && GetBoundType(binding.DataSource) == expectedType) {
...
}
Если вы знаете, что реальный объект данных был связан с источником данных, вы можете получить его с помощью:
object entity = binding.DataSource is BindingSource bs ? bs.DataSource : binding.DataSource;