私はプロパティに添付されたテキストボックスの束を生成するコードを書いています。 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プロパティにバインディングのパスプロパティを設定し
プロパティの実装を表示できますか? –
Bindingの 'Path'をプロパティの名前に設定し、' Source'をプロパティを所有するオブジェクトに設定します。 – Clemens