我正在编写代码来生成附加到属性的一堆文本框。有没有办法可以将源设置为使用反射找到的属性,存储为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不会绑定到属性本身。
答案 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属性指定定义此属性的对象。