后面的代码:检查控件的属性是否绑定

时间:2018-07-26 10:16:57

标签: c# wpf binding code-behind

我正在寻找一种方法来检入后面的代码,如果控件的属性已绑定并且似乎找不到正确的方法来执行此操作。我想我需要先获取FieldInfo(在通用方法中使用System.Windows.Controls.Control控件):

FieldInfo te = null;
foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(control))
{
    if (prop.Name.Equals("Visibility"))
    {
        te = control.GetType().GetField(prop.Name + "Property");
        break;
    }
}

...没有找到PropertyDescriptor,但没有找到FieldInfo。

FieldInfo gg = control.GetType().GetField("Visibility", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
FieldInfo gg1 = control.GetType().GetField("VisibilityProperty", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
FieldInfo gg2 = typeof(Control).GetField("Visibility", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
FieldInfo gg3 = typeof(Control).GetField("VisibilityProperty", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

...全部返回null作为FieldInfo。找到FieldInfo后,我想通过以下操作检查值是否已绑定:

DependencyProperty dp = (DependencyProperty)field.GetValue(control);
if (control.GetBindingExpression(dp) == null) ...

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用BindingOperations.GetBinding获取绑定对象。就像

// textBox3 is an instance of a TextBox
// the TextProperty is the data-bound dependency property
Binding myBinding = BindingOperations.GetBinding(textBox3, TextBox.TextProperty);

参考How to: Get the Binding Object from a Bound Target Property