是否可以使用WPF中的反射绑定到属性?

时间:2016-12-27 23:32:44

标签: c# .net wpf reflection system.reflection

我正在编写代码来生成附加到属性的一堆文本框。有没有办法可以将源设置为使用反射找到的属性,存储为PropertyInfo?

通过财产的代码:

foreach(PropertyInfo prop in GetType().GetProperties())
{
    UI.Text ctrl = new UI.Text(prop.Name, prop.GetValue(this).ToString(), prop);
    sp.Children.Add(ctrl);
}

(注意:UI.Text是包含文本框的自定义控件,sp是StackPanel)

绑定代码:

Binding bind = new Binding() { Source = prop };
if (prop.CanWrite)
{
    TextBox.SetBinding(TextBox.TextProperty, bind);
}
else
{
    TextBox.IsEnabled = false;
}

我目前收到错误“双向绑定需要Path或XPath”,这通常在尝试绑定到只读属性时发生。由于代码受到保护,很明显,简单地绑定到PropertyInfo不会绑定到属性本身。

1 个答案:

答案 0 :(得分:2)

将Binding的路径属性设置为prop.Name,将Source属性设置为 this 或您要绑定到的任何对象:

Binding bind = new Binding() { Path = new PropertyPath(prop.Name), Source = this };
if (prop.CanWrite)
{
    TextBox.SetBinding(TextBox.TextProperty, bind);
}
else
{
    TextBox.IsEnabled = false;
}

Binding的路径指定要绑定的属性,Source属性指定定义此属性的对象。