2016-12-27 88 views
0

我正在編寫代碼來生成附加到屬性的一堆文本框。有什麼方法可以將源設置爲使用反射找到的屬性,並將其存儲爲PropertyInfo?是否有可能使用WPF中的反射來綁定到屬性?

代碼通過屬性會:

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; 
} 

我當前遇到錯誤「雙向綁定需要路徑或XPath」,這通常會在嘗試綁定到只讀屬性時發生。由於代碼受到保護,顯然,綁定到PropertyInfo的綁定不會綁定到屬性本身。

+0

你可以顯示財產執行? –

+0

將Binding的'Path'設置爲屬性的名稱,將Source設置爲擁有該屬性的對象。 – Clemens

回答

1

設置綁定到prop.Name的路徑屬性和Source屬性這個或要綁定到任何對象:

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

綁定的路徑指定屬性綁定到並且Source屬性指定了該屬性被定義的對象。

相關問題