2016-12-27 15 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への単純なバインディングはプロパティ自体にバインドしないことは明らかです。

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

バインディングのパスプロパティを指定します。このまたはものは何でもにバインドするオブジェクトにprop.NameとSourceプロパティにバインディングのパスプロパティを設定し

+0

プロパティの実装を表示できますか? –

+0

Bindingの 'Path'をプロパティの名前に設定し、' Source'をプロパティを所有するオブジェクトに設定します。 – Clemens

答えて

1

にバインドし、Sourceプロパティは、このプロパティが定義されているオブジェクトを指定します。

関連する問題