我有一个文本框,一个对象绑定到该文本。在代码中,我需要找到绑定了哪个对象。
我使用的是Windows.Forms.TextBox,我将DataBinding Text绑定到任何对象名称字段。这是在设计时完成的。在代码中,我需要弄清楚绑定到这个TextBox的对象是什么。
尝试在运行时查询文本框的DataBindings属性。
在运行时的代码中,假设绑定对象是某个MyObject:
if (textBox1.DataBindings.Count == 1)
{
var myObj = textBox1.DataBindings[0].DataSource as MyObject;
if (myObj != null)
// do something with the bound object
else
// well, found data bound object but it was not a MyObject... Handle as appropriate
}
希望这能有所帮助。
以防万一还有人需要知道:textBox1.DataBindings("Text").BindingMemberInfo.BindingField
Tim
对象是否存储在Textbox的标记中?
object o = textbox.Tag;
查询文本框的DataBindings
。Binding
的DataSource
可以包含不同的东西:
- 描述属性可以绑定到的对象类型的
Type
对象。当加载表单时,还没有附加任何对象时,可能会出现这种情况 - 一个
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;