プロパティにバインドできますが、別のプロパティ内のプロパティはバインドできません。何故なの?例えばWPF:ネストされたプロパティにバインドする方法は?
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}"...>
...
<!--Doesn't work-->
<TextBox Text="{Binding Path=ParentProperty.ChildProperty,Mode=TwoWay}"
Width="30"/>
は(注:私はマスターの詳細や、何もするつもりはないよ両方の特性は、標準的なCLRプロパティです。。)
更新:問題は私のParentPropertyがあることXAMLでオブジェクトに依存することでした初期化されました。残念ながら、そのオブジェクトは後でXAMLファイルでBindingよりも定義されていました。そのため、ParentPropertyがBindingによって読み込まれた時点でオブジェクトがnullでした。レイアウトを台無しになりXAMLファイルを再配置するので、私は考えることができる唯一の解決策は、コードビハインドでバインディングを定義することでした:
<TextBox x:Name="txt" Width="30"/>
// after calling InitializeComponent()
txt.SetBinding(TextBox.TextProperty, "ParentProperty.ChildProperty");
はい、これは理由があると思われます。 ParentPropertyは読み取り専用ですが、XAMLの特定のコントロールが初期化されているかどうかによって異なります。このオブジェクトはバインディング後の.xamlファイルで定義されているため、ParentPropertyが呼び出されるとNullReferenceExceptionがスローされます。私はWPFがそれを飲み込んだので気づかなかった。私は出力ウィンドウをチェックしておくべきだった! – Qwertie
今、私は新しいパズルを持っています - どのようにレイアウトを台無しにすることなくXAMLで正しい順序でオブジェクトを定義する。 – Qwertie
または、プロパティを読み取る前に、ウィンドウが完全に初期化されるまで何らかの方法でバインディングを待機させることはできますか? {Binding ElementName = xyz、...}を使用すると、xyzが後でXAMLファイルで定義されても機能します。私のParentProperty(要素xyzを使用する)はxyzが後でXAMLファイルで定義されるために機能しません。 – Qwertie